Asp.net 如何使用HttpClientFactory为命名的HttpClient定义HttpClientHandler

Asp.net 如何使用HttpClientFactory为命名的HttpClient定义HttpClientHandler,asp.net,asp.net-core,.net-core,dotnet-httpclient,httpclientfactory,Asp.net,Asp.net Core,.net Core,Dotnet Httpclient,Httpclientfactory,旧代码: Client = new HttpClient(new HttpClientHandler() { DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials }); // set an default user agent string, some services does not allow emtpy user agents if (!Client.DefaultRequestHeaders.Cont

旧代码:

Client = new HttpClient(new HttpClientHandler() { DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials });

// set an default user agent string, some services does not allow emtpy user agents
if (!Client.DefaultRequestHeaders.Contains("User-Agent"))
    Client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0");
正在尝试使用新的ASP.NET Core 2.1 HttpClientFactory实现相同的功能:

services.AddHttpClient("Default", client =>
        {
            client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");
        }).ConfigurePrimaryHttpMessageHandler(handler => new HttpClientHandler() { DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials });          
不幸的是,我得到了一个HTTP407(代理身份验证)错误。
我做错了什么?

通常建议使用一个静态类,其中包含客户端名称的字符串常量

比如:

public static class NamedHttpClients {
    public const string Default = "Default";
}
然后确保正确配置了命名客户端,在您的特定情况下如下所示:

services
    .AddHttpClient(NamedHttpClients.Default, client => {
        client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");
    })
    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() { 
        DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials 
    }); 
从那里,您可以从注入的
IHttpClientFactory

var client = httpClientFactory.CreateClient(NamedHttpClients.Default);

并按原意使用。

你的问题怎么没有更多的赞成票?当你搜索这个时,谷歌上几乎什么都没有。