首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建筑后的Flurl代理?

建筑后的Flurl代理?
EN

Stack Overflow用户
提问于 2019-04-18 23:32:05
回答 1查看 672关注 0票数 0

我正在使用Flurl在我的应用程序中使用一个API,并且我有一个关于代理的问题。问题是,我希望用户能够在启动后根据需要设置代理,使用Flurl可以吗?

我找到了,但这建议你只打电话给创业公司,因为据我所知,你不能在事实发生后真正改变它。我还找到了,但这将使用不同的代理分离出不同的请求,这也不是我所需要的。

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

有办法这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 13:05:24

简而言之,每次设置或更改代理时,都需要创建一个新客户端。这是由于依赖链上的约束:

  1. 代理信息在HttpClientHandler中设置。
  2. 处理程序将传递给HttpClient构造函数,此后不能更改。
  3. FlurlClient包装了一个HttpClient,它要么通过构造函数显式传递,要么(更典型地)通过默认规则或自定义规则通过设置和工厂配置延迟创建。一旦创建,它就不能改变。
  4. 即使您持有对HttpClientHandler的引用,并试图在以后的某个时候更改它的代理设置,您也会得到一个运行时错误

如果您目前没有显式地使用FlurlClient,我将切换到该范例。下面是用户更改代理时需要发生的情况的一个示例:

代码语言:javascript
复制
var hch = new HttpClientHandler {
    UseProxy = true,
    Proxy = new WebProxy(proxyUrl)
};
var hc = new HttpClient(hch) { BaseAddress = baseUrl };
var fc = new FlurlClient(hc);

然后,您就可以流畅地在fc上构建调用,就像您从URL开始时一样:

代码语言:javascript
复制
var thing = await fc.Request("path", "to", "endpoint").GetJsonAsync<T>();

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55754897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档