如何让 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 重定向?的主要内容,如果未能解决你的问题,请参考以下文章

Jfreechart柱状图如何让变成纯色

android中如何让文字环绕图片

如何让GridView 标题居中

请教如何让UIActivityIndicatorView永远居中

如何让ActionBar标题居中

EBS如何让从值集不显示