如何让 System.Net.Http.HttpClient 不遵循 302 重定向?
Posted
技术标签:
【中文标题】如何让 System.Net.Http.HttpClient 不遵循 302 重定向?【英文标题】:How can I get System.Net.Http.HttpClient to not follow 302 redirects? 【发布时间】:2012-05-04 18:03:23 【问题描述】:使用HttpClient from NuGet。
应用程序使用 client.PostAsync() 发送帖子。我希望它不遵循 302 重定向。
怎么样?
我想我可以按照this answer 中的描述设置AllowAutoRedirect
。
但是如何在 PostAsync() 调用中使用 HttpWebRequest
?
【问题讨论】:
【参考方案1】:HttpClient
构造函数的重载之一采用
WebRequestHandler
参数。 HttpClient
类使用这个
WebRequestHandler
用于发送请求。
WebRequestHandler
类提供了一个名为 AllowAutoRedirect
的属性
配置重定向行为。将此属性设置为 false
指示HttpClient
不遵循重定向响应。
这是一个小代码示例:
WebRequestHandler webRequestHandler = new WebRequestHandler();
webRequestHandler.AllowAutoRedirect = false;
HttpClient httpClient = new HttpClient(webRequestHandler);
// Send a request using GetAsync or PostAsync
Task<HttpResponseMessage> response = httpClient.GetAsync("http://www.google.com");
【讨论】:
好的,谢谢。这意味着我不能为每个调用指定 302 跟随行为,对吗?它是每个处理程序的,我猜这意味着每个 HttpClient 实例。是吗? 是的,它针对 HttpClient 的每个实例。如果您尝试在两次调用之间修改 AllowAutoRedirect 属性,您将得到一个异常。【参考方案2】:补充汉斯的回答:
WebRequestHandler 派生自 HttpClientHandler 但添加了属性 通常仅在完整的 .NET 上可用。 WebRequestHandler 不包含在 System.Net.Http DLL 中,而是包含在 System.Net.Http.WebRequest DLL,因此您必须明确包含它 作为参考,以便看到它。否则不会显示。
如果您不想添加新的 DLL,您可以直接使用 HttpClientHandler:
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.AllowAutoRedirect = false;
参考:https://blogs.msdn.microsoft.com/henrikn/2012/08/07/httpclient-httpclienthandler-and-webrequesthandler-explained/
【讨论】:
以上是关于如何让 System.Net.Http.HttpClient 不遵循 302 重定向?的主要内容,如果未能解决你的问题,请参考以下文章