【发布时间】:2021-12-10 12:33:02
【问题描述】:
任务是配置HttpClient的代理依赖于一个URL。例如,如果一个 URL 包含“hostname.com”,则必须设置。
最佳做法是什么?
以下是解决方案吗?
在 DI 中注册不同的 HttpClients 为:
-- Configured typed HttpClients with different proxies for each service
services.AddHttpClient<Service1>().ConfigurePrimaryHttpMessageHandler(GetHttpHandlerSetter(s => s.Service1));
services.AddHttpClient<Service2>().ConfigurePrimaryHttpMessageHandler(GetHttpHandlerSetter(s => s.Service2));
-- Configured named HttpClient without proxy
services.AddHttpClient("NoProxy");
而Service1和Service2会解析IHttpClientFactory:
public class Service1
{
readonly IHttpClientFactory _httpClientFactory;
public IdgwConnectorManager(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public void Get(string url)
{
if (url...)
{
_httpClientFactory.CreateClient(nameof(Service1));
}
else
{
_httpClientFactory.CreateClient("NoProxy");
}
}
}
【问题讨论】:
-
我会使用 RestSharp 并为此设置一个 Webproxy。如果 webproxy 为空或完整数据的示例将解决问题
标签: c# dotnet-httpclient httpclientfactory