C# 施工后的Flurl代理?

C# 施工后的Flurl代理?,c#,http,flurl,C#,Http,Flurl,我使用Flurl在我的应用程序中使用API,我对代理有一个问题。问题是,我希望用户能够在启动后设置代理(如果必要),Flurl是否可以这样做 我发现了,但这建议你只在创业时打电话,因为我能告诉你,你不能在事后真的改变它。我还发现,但这是分离出不同的请求来使用不同的代理,这也不是我所需要的 基本上,我希望它一开始默认为无代理,就像它一样,并将其用于所有请求。然后稍后,如果用户设置代理并输入数据,我希望能够为Flurl设置代理,并使其用于此后的所有请求 有没有办法做到这一点?简单的回答是,每次设置或

我使用Flurl在我的应用程序中使用API,我对代理有一个问题。问题是,我希望用户能够在启动后设置代理(如果必要),Flurl是否可以这样做

我发现了,但这建议你只在创业时打电话,因为我能告诉你,你不能在事后真的改变它。我还发现,但这是分离出不同的请求来使用不同的代理,这也不是我所需要的

基本上,我希望它一开始默认为无代理,就像它一样,并将其用于所有请求。然后稍后,如果用户设置代理并输入数据,我希望能够为Flurl设置代理,并使其用于此后的所有请求


有没有办法做到这一点?

简单的回答是,每次设置或更改代理时,您都需要创建一个新的客户端。这是由于依赖链下游的约束:

  • 代理信息在
    HttpClientHandler
    中设置
  • 处理程序被传递给
    HttpClient
    构造函数,此后无法更改
  • FlurlClient
    只包装一个
    HttpClient
    ,它要么通过其构造函数显式传递,要么(更典型地)通过其默认规则或自定义规则惰性地创建。一旦创建,它就无法更改
  • 即使您持有对
    HttpClientHandler
    的引用,并在以后的某个时间尝试更改其代理设置,您也会得到一个错误
  • 如果您当前没有明确使用
    FlurlClient
    ,我会切换到该范例。下面是一个示例,说明当用户更改代理时需要执行的操作:

    var hch = new HttpClientHandler {
        UseProxy = true,
        Proxy = new WebProxy(proxyUrl)
    };
    var hc = new HttpClient(hch) { BaseAddress = baseUrl };
    var fc = new FlurlClient(hc);
    
    然后,您可以流畅地建立调用
    fc
    ,类似于从URL开始时的调用方式:

    var thing = await fc.Request("path", "to", "endpoint").GetJsonAsync<T>();
    
    var thing=wait fc.Request(“path”、“to”、“endpoint”).GetJsonAsync();
    

    根据您是否有多个并发用户或并发调用,您可以将其封装到每个代理地址缓存
    FlurlClient
    实例的内容中,从而使其更加健壮,例如,通过使用
    ConcurrentDictionary

    简单的回答是,每次设置或更改代理时,您都需要创建一个新的客户端。这是由于依赖链下游的约束:

  • 代理信息在
    HttpClientHandler
    中设置
  • 处理程序被传递给
    HttpClient
    构造函数,此后无法更改
  • FlurlClient
    只包装一个
    HttpClient
    ,它要么通过其构造函数显式传递,要么(更典型地)通过其默认规则或自定义规则惰性地创建。一旦创建,它就无法更改
  • 即使您持有对
    HttpClientHandler
    的引用,并在以后的某个时间尝试更改其代理设置,您也会得到一个错误
  • 如果您当前没有明确使用
    FlurlClient
    ,我会切换到该范例。下面是一个示例,说明当用户更改代理时需要执行的操作:

    var hch = new HttpClientHandler {
        UseProxy = true,
        Proxy = new WebProxy(proxyUrl)
    };
    var hc = new HttpClient(hch) { BaseAddress = baseUrl };
    var fc = new FlurlClient(hc);
    
    然后,您可以流畅地建立调用
    fc
    ,类似于从URL开始时的调用方式:

    var thing = await fc.Request("path", "to", "endpoint").GetJsonAsync<T>();
    
    var thing=wait fc.Request(“path”、“to”、“endpoint”).GetJsonAsync();
    

    根据您是否有多个并发用户或并发调用,您可以通过将其封装到每个代理地址缓存
    FlurlClient
    实例的东西中(例如使用
    ConcurrentDictionary

    )使其更加健壮。您的两个链接似乎都指向同一页面。第二个应该链接到其他东西吗?哦,是的,第二个应该是。我更新了问题以修复它,谢谢。看起来你的两个链接都指向同一个页面。第二个应该链接到其他东西吗?哦,是的,第二个应该是。我更新了问题以解决它,谢谢。好的,这很有意义。我目前没有使用FlurlClient,但我想我可以很容易地切换到它。非常感谢。好吧,这是有道理的。我目前没有使用FlurlClient,但我想我可以很容易地切换到它。非常感谢。