Bru*_*ino 5 .net c# dotnet-httpclient .net-core httpclientfactory
我没有找到有关它的文档,我认为我当前的解决方案不是最佳的,因为处理程序生命周期不是由HttpClientFactory管理的:
var proxiedHttpClientHandler = new HttpClientHandler() { Proxy = httpProxy };
_createHttpClient = () => HttpClientFactory.Create(proxiedHttpClientHandler);
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?
将客户端添加到服务集合时,您应该能够在那里配置处理程序
使用命名的客户端方法,我将使用一个常量来保存客户端名称。
public static class NamedHttpClients {
public const string ProxiedClient = "ProxiedClient";
}
Run Code Online (Sandbox Code Playgroud)
从那里开始,只需配置客户端即可
//...
var serviceCollection = new ServiceCollection();
serviceCollection
.AddHttpClient(NamedHttpClients.ProxiedClient)
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() {
Proxy = httpProxy
});
var services = serviceCollection.BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)
这样在通过解决方案致电客户时 IHttpClientFactory
var httpClientFactory = services.GetService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient(NamedHttpClients.ProxiedClient);
Run Code Online (Sandbox Code Playgroud)
返回的客户端将把处理程序与代理一起使用。
你可以这样做:
private HttpClient ClientFactory()
{
var proxiedHttpClientHandler = new HttpClientHandler(){ UseProxy = true};
proxiedHttpClientHandler.Proxy = new WebProxy("proxy address");
var httpClient = new HttpClient(proxiedHttpClientHandler)
{
BaseAddress = new Uri("uri");
Timeout = 2000; //if you need timeout;
}
}
_createHttpClient = () => ClientFactory();
Run Code Online (Sandbox Code Playgroud)
有一个很好的讨论,在这里关于使用手动工厂与实例化一个HttpClient的对象。
| 归档时间: |
|
| 查看次数: |
3655 次 |
| 最近记录: |