C# 如何为通过HttpClientFactory直接创建的HttpClient配置web代理? 我的直接意思是没有Asp.Net核心IoC/DI助手
我没有找到关于它的文档,我认为我当前的解决方案不是最优的,因为处理程序生命周期不是由HttpClientFactory管理的:C# 如何为通过HttpClientFactory直接创建的HttpClient配置web代理? 我的直接意思是没有Asp.Net核心IoC/DI助手,c#,.net,.net-core,dotnet-httpclient,httpclientfactory,C#,.net,.net Core,Dotnet Httpclient,Httpclientfactory,我没有找到关于它的文档,我认为我当前的解决方案不是最优的,因为处理程序生命周期不是由HttpClientFactory管理的: var proxiedHttpClientHandler = new HttpClientHandler() { Proxy = httpProxy }; _createHttpClient = () => HttpClientFactory.Create(proxiedHttpClientHandler); 有更好的解决方案吗?您可以这样做: private
var proxiedHttpClientHandler = new HttpClientHandler() { Proxy = httpProxy };
_createHttpClient = () => HttpClientFactory.Create(proxiedHttpClientHandler);
有更好的解决方案吗?您可以这样做:
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();
关于使用工厂与手动实例化httpClient对象,有一个很好的讨论。将客户端添加到服务集合时,您应该能够在那里配置处理程序 使用命名客户机方法,我将使用一个常量来保存客户机名称
public static class NamedHttpClients {
public const string ProxiedClient = "ProxiedClient";
}
从这里开始,只需配置客户端
//...
var serviceCollection = new ServiceCollection();
serviceCollection
.AddHttpClient(NamedHttpClients.ProxiedClient)
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() {
Proxy = httpProxy
});
var services = serviceCollection.BuildServiceProvider();
因此,当通过解析的IHttpClientFactory调用客户端时
var httpClientFactory = services.GetService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient(NamedHttpClients.ProxiedClient);
var httpClientFactory=services.GetService();
var client=httpClientFactory.CreateClient(名称为dhttpclients.ProxiedClient);
返回的客户端将使用代理的处理程序。我正在实现一个http调度程序。它在消息消费循环中调用,并发布到Webhook。我假设我必须使用HttpClientFactory:我没有使用Asp.Net核心IoC/DI及其助手。我需要直接配置和使用HttpClientFactory。那么您打算如何创建工厂呢?您知道您可以自己创建服务集合并从服务提供商那里获得好处吗?我不是在创建服务集合。这就是重点。它是一个基于控制台应用程序模板的项目(dotnet新控制台),与Asp.Net核心无关。我需要直接使用HttpClientFactory和HttpClient。如果这是一个选项,那没关系,但我的问题是如何在没有服务收集IoC/DI基础设施的情况下做到这一点。应该不难,好的,明白了。这是一个带有DI的控制台示例。我去看看有没有没有没有。