发布于 2019-04-19 13:05:24
简而言之,每次设置或更改代理时,都需要创建一个新客户端。这是由于依赖链上的约束:
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>();根据您是否有多个并发用户或并发调用,您可以通过将其封装到每个代理地址缓存FlurlClient实例的东西中来使其更加健壮,例如使用ConcurrentDictionay。
https://stackoverflow.com/questions/55754897
复制相似问题