Ton*_*zel 5 asp.net dotnet-httpclient .net-core asp.net-core 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.Contains("User-Agent"))
Client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0");
Run Code Online (Sandbox Code Playgroud)
尝试使用新的 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 });
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到一个 HTTP 407(代理身份验证)错误。我做错了什么?
通常建议使用包含客户端名称字符串常量的静态类。
就像是:
public static class NamedHttpClients {
public const string Default = "Default";
}
Run Code Online (Sandbox Code Playgroud)
然后确保命名客户端配置正确,在您的特定情况下,它看起来像:
services
.AddHttpClient(NamedHttpClients.Default, client => {
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");
})
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() {
DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials
});
Run Code Online (Sandbox Code Playgroud)
从那里你可以从注入的客户端中获取客户端 IHttpClientFactory
var client = httpClientFactory.CreateClient(NamedHttpClients.Default);
Run Code Online (Sandbox Code Playgroud)
并按预期使用。
| 归档时间: |
|
| 查看次数: |
6118 次 |
| 最近记录: |