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

Che*_*eso 23 c# dotnet-httpclient

使用NuGet的HttpClient.

该应用程序使用client.PostAsync()发送帖子.我希望它不要遵循302重定向.

怎么样?

我想我可以AllowAutoRedirect按照这个答案中的描述进行设置.

但是如何HttpWebRequest在PostAsync()调用中使用?

Han*_*ans 36

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");
Run Code Online (Sandbox Code Playgroud)

  • 是的,它是 HttpClient 的每个实例。如果您尝试在两次调用之间修改 AllowAutoRedirect 属性,则会出现异常。 (2认同)

rot*_*d86 5

要添加到汉斯的答案中:

WebRequestHandler派生自HttpClientHandler,但添加了通常仅在完整.NET上可用的属性。WebRequestHandler未包含在System.Net.Http DLL中,而是包含在System.Net.Http.WebRequest DLL中,因此您必须明确地将其包含为引用才能看到它。否则它将不会显示。

如果您不想添加新的DLL,则可以只使用HttpClientHandler。

    HttpClientHandler clientHandler = new HttpClientHandler();
    clientHandler.AllowAutoRedirect = false;
Run Code Online (Sandbox Code Playgroud)

参考:https : //blogs.msdn.microsoft.com/henrikn/2012/08/07/httpclient-httpclienthandler-and-webrequesthandler-explained/