如何使用 HttpClientFactory 为命名的 HttpClient 定义 HttpClientHandler
Posted
技术标签:
【中文标题】如何使用 HttpClientFactory 为命名的 HttpClient 定义 HttpClientHandler【英文标题】:How to define a HttpClientHandler for named HttpClient using HttpClientFactory 【发布时间】:2018-06-26 13:50:04 【问题描述】:旧代码:
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 );
很遗憾,我收到了 HTTP 407(代理身份验证)错误。 我做错了什么?
【问题讨论】:
你的问题怎么没有更多的赞成票?当您搜索此内容时,Google 上几乎没有任何内容。 【参考方案1】:通常建议使用包含客户端名称的字符串常量的静态类。
类似:
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);
并按预期使用。
【讨论】:
以上是关于如何使用 HttpClientFactory 为命名的 HttpClient 定义 HttpClientHandler的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HttpClientFactory 为命名的 HttpClient 定义 HttpClientHandler
如何使用 Moq 在 .NET Core 2.1 中模拟新的 HttpClientFactory
第二十六节:扩展如何在控制台中使用HttpClientFactory读取配置文件数据保护注入类
如何使用 Httpclientfactory Typed 客户端调用装饰有 ValidateAntiForgeryToken 的服务器 api?