Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为通过HttpClientFactory直接创建的HttpClient配置web代理? 我的直接意思是没有Asp.Net核心IoC/DI助手_C#_.net_.net Core_Dotnet Httpclient_Httpclientfactory - Fatal编程技术网

C# 如何为通过HttpClientFactory直接创建的HttpClient配置web代理? 我的直接意思是没有Asp.Net核心IoC/DI助手

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

我没有找到关于它的文档,我认为我当前的解决方案不是最优的,因为处理程序生命周期不是由HttpClientFactory管理的:

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的控制台示例。我去看看有没有没有没有。