Как явно передать httpclienthandler в httpclientfactory? - PullRequest
2 голосов
/ 02 июля 2019

Я думал об использовании HttpClientFactory, но мне нужно прикрепить сертификат во время вызова В настоящее время я использую HttpClient, но не знаю, как прикрепить сертификат.
Ниже приведен код httpClient:

HttpClientHandler httpClientHandler = new HttpClientHandler
{
    SslProtocols = SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12,
    ClientCertificateOptions = ClientCertificateOption.Manual
};
httpClientHandler.ClientCertificates.Add(CertHelper.GetCertFromStoreByThumbPrint(_Settings.MtlsThumbPrint, StoreName.My, _Settings.IgnoreCertValidChecking));

httpClientHandler.ServerCertificateCustomValidationCallback = OnServerCertificateValidation;

HttpClient _client = new HttpClient(httpClientHandler)
{
    Timeout = TimeSpan.FromMinutes(1),
    BaseAddress = new Uri(_Settings.BaseUrl)
};

Итак, как преобразовать вышеуказанный httpClient в HttpClientFactory?

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 02 июля 2019

Предполагая, что вы имеете в виду, используя ServiceCollection, вы можете настроить обработчик при настройке клиента

services.AddHttpClient("MyClient", client => {
    client.Timeout = TimeSpan.FromMinutes(1),
    client.BaseAddress = new Uri(_Settings.BaseUrl)
})
.ConfigurePrimaryHttpMessageHandler(() => {
    var httpClientHandler = new HttpClientHandler
    {
        SslProtocols = SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12,
        ClientCertificateOptions = ClientCertificateOption.Manual
    };
    httpClientHandler.ClientCertificates.Add(CertHelper.GetCertFromStoreByThumbPrint(_Settings.MtlsThumbPrint, StoreName.My, _Settings.IgnoreCertValidChecking));

    httpClientHandler.ServerCertificateCustomValidationCallback = OnServerCertificateValidation;

    return httpClientHandler;
});

Таким образом, когда вводится IHttpClientFactory и вызывается клиент.

var _client = httpClientFactory.CreateClient("MyClient");

созданному клиенту будут настроены нужные сертификаты.

...