Как определить HttpClientHandler для именованного 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.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 (Proxy Auth). Что я делаю не так?
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);
и используется по назначению.