.NET Core:HttpClientFactory:如何在没有依赖项注入的情况下配置ConfigurePrimaryHttpMessageHandler?

时间:2020-09-14 06:25:04

标签: c# asp.net-core .net-core dependency-injection httpclient

我有一个.NET Core类库。我使用IHttpClientFactory创建HttpClient实例,而没有依赖项注入。我在类库中包含了Microsoft DI nuget软件包。

示例代码1:

Class A {

private readonly HttpClient client;

 public A(){
            var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
            var _httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
            client = _httpClientFactory.CreateClient();  //HttpClient instance created
            //TODO: Add custom message handler without DI.
  }
}

使用DI,我们可以配置自定义消息处理程序: 带有DI的示例代码#2:

services.AddHttpClient()
        .ConfigurePrimaryHttpMessageHandler(() =>
        {
            return new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
            };
        });

我想将HttpClientHandler添加到没有DI的示例代码#1中。 如何配置没有DI的主消息处理程序?

1 个答案:

答案 0 :(得分:0)

我认为这是一个奇怪的设置,但除此之外,您可能可以执行以下操作:

private readonly HttpClient client;

public A() {
    var serviceProvider = new ServiceCollection()
        .AddHttpClient("YourHttpClientName")
        .Configure<HttpClientFactoryOptions>("YourHttpClientName", options =>
            options.HttpMessageHandlerBuilderActions.Add(builder =>
                builder.PrimaryHandler = new HttpClientHandler
                {
                    ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
                }))
        .BuildServiceProvider();
    var _httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
    client = _httpClientFactory.CreateClient();  //HttpClient instance created
    //TODO: Add custom message handler without DI.
}

我刚刚检查了ConfigurePrimaryHttpMessageHandler的实现,并将其链接到您的设置中。


我的建议是更改代码并正确使用DI,因为.NET Core非常依赖于此。

相关问题