如何让System.Net.Http.HttpClient不遵循302重定向?

31

使用NuGet中的HttpClient

应用程序使用client.PostAsync()发送Post请求。我希望它不遵循302重定向。

如何实现呢?

我想我可以按照这个答案所述,设置AllowAutoRedirect来实现。

但是怎样才能获取在PostAsync()调用中使用的HttpWebRequest呢?

2个回答

48

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");

1
好的,谢谢。这意味着我不能针对每个调用指定302-following行为,对吗?它是针对处理程序的,这意味着,我猜测,是针对每个HttpClient实例。是吗? - Cheeso
2
是的,这是针对每个HttpClient实例的。如果你在两次调用之间尝试修改AllowAutoRedirect属性,将会抛出异常。 - Hans

17

补充Hans的答案:

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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接