【问题标题】:Can I change the properties of a HttpClientHandler after the HttpClient has been created?创建 HttpClient 后,我​​可以更改 HttpClientHandler 的属性吗?
【发布时间】:2014-09-11 19:45:09
【问题描述】:

HttpClientHandler 可以在创建 HttpClient 对象时用作参数,但之后似乎没有任何方法可以在不保留对它的引用的情况下访问处理程序。

Dim Handler as New HttpClientHandler
Handler.CookieContainer = Cookies
Handler.Proxy = Proxy
Handler.UseProxy = True
Handler.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate
Dim Client as New HttpClient(Handler, True)

我能否更改现有客户端对象的处理程序的属性?例如,更改代理或自动重定向。当客户端当前正在处理其他 HttpRequestMessages 时,我这样做会有什么问题吗?

【问题讨论】:

  • 您是否阅读过有关 AutoRedirects 的 MSDN 文档? Allow Auto Redirect
  • @DJKRAZE 谢谢,但我在 .NET 4.5 中没有使用 HttpWebRequest 而是使用 HttpClient

标签: c# .net vb.net dotnet-httpclient


【解决方案1】:

经过进一步测试,似乎不可能,当我尝试修改 HttpClientHandler 的属性时抛出异常。需要一个新的 HttpClient 实例。

【讨论】:

    【解决方案2】:

    是的,你可以。关键是改变对象而不是httpclient的属性。记住 OOP 101。

    将属性指向同一个对象,但更改该对象的内容。

     Dim Handler As New HttpClientHandler
        Dim proxy As New WebProxy()
        Dim urlBuilder As New System.UriBuilder
        Handler.Proxy = proxy
        Handler.UseProxy = True
        Handler.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate
        Dim Client As New HttpClient(Handler, True)
    
        urlBuilder.Host = "124.161.94.8"
        urlBuilder.Port = 80
        proxy.Address = urlBuilder.Uri
    
        Dim response As String = Await Client.GetStringAsync("http://www.ipchicken.com")
    
        urlBuilder.Host = "183.207.228.8"
        urlBuilder.Port = 80
        proxy.Address = urlBuilder.Uri
    
        response = Await Client.GetStringAsync("http://www.ipchicken.com")
    

    【讨论】:

    • 当然,请记住,如果您在并发或多线程环境中使用这种方法,它可能不起作用。而且不用说,非对象值类型的属性可能不会改变。
    猜你喜欢
    • 2012-10-11
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多