简短的回答是,每次设置或更改代理时都需要创建一个新的客户机。这是由于依赖链的约束:
-
HttpClientHandler
.
-
处理程序传递给
HttpClient
构造函数,之后不能更改。
-
FlurlClient
正好一个
http客户端
,或者通过其构造函数显式传递,或者(更典型地说)通过其默认规则或自定义规则惰性地创建。
configured via settings and factories
。一旦创建,就无法更改。
-
即使你提到
httpClientHandler
稍后尝试更改其代理设置,您将获得
runtime error
.
如果您当前没有使用
氟客户端
明确地说,我会转向那个模式。下面是一个示例,说明当用户更改代理时需要执行的操作:
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>();
根据您是有多个并发用户还是有多个并发调用,您可以通过将其封装到缓存中使其更加健壮。
氟客户端
每个代理地址的实例,例如使用
ConcurrentDictionay
.