如何在core2.1中使用WinHttpHandler和IHttpClientFactory?

时间:2018-06-08 13:47:06

标签: c# asp.net-core asp.net-core-2.1

我尝试将新的IHttpClientFactory与ASP.net Core 2.1 WEB API应用程序一起使用。

public void ConfigureServices(IServiceCollection services)
{
    // other services configuration
    services.AddHttpClient();
}

在我的ConfigureServices方法中,我看不到添加IHttpClientFactory并将其配置为使用WinHttpHandler的方法。

返回AddHttpClient的{​​{1}}方法可让您访问配置IHttpClientBuilder的方法,但这些方法必须来自HttpMessageHandlerDelegatingHandler不是来自WinHttpHandler

在构建时,无法告诉DelegatingHandler使用HttpClient

1 个答案:

答案 0 :(得分:3)

想出来。

感谢@Nkosi在评论中提供的小费!

我在注册HttpClient服务时使用名为HttpClient然后配置消息处理程序以使用WinHttpHandler作为PrimaryHandler

解决了这个问题
services.AddHttpClient<HttpClient>("WinHttp")
        .ConfigureHttpMessageHandlerBuilder(c =>
        {
            c.PrimaryHandler = new WinHttpHandler() { WindowsProxyUsePolicy = WindowsProxyUsePolicy.UseWinInetProxy };
        });

然后在使用IHttpClientFactory时,请指定注册时提供的名称。

var httpClient = this._httpClientFactory.CreateClient("WinHttp");

您的HttpClient现在将使用WinHttpHandler

注意 要使用WinHttpHandler,您必须添加nuget包System.Net.Http.WinHttpHandler