【问题标题】:How can I get System.Net.Http.HttpClient to not follow 302 redirects?如何让 System.Net.Http.HttpClient 不遵循 302 重定向?
【发布时间】:2012-05-04 18:03:23
【问题描述】:

使用HttpClient from NuGet

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

怎么样?

我想我可以按照this answer 中的描述设置AllowAutoRedirect

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

【问题讨论】:

    标签: c# dotnet-httpclient


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 2013-09-11
      • 1970-01-01
      • 2013-08-15
      • 2015-06-07
      • 1970-01-01
      • 2014-02-25
      相关资源
      最近更新 更多