Как настроить сертификат с помощью httpclientfactory - PullRequest
0 голосов
/ 06 февраля 2019

Я использую HttpclientFactory для запроса Weichat оплаты Api.Но Вейхат платит Api, нужен сертификат.Как я могу настроить HttpClintFactory для использования сертификата?

1 Ответ

0 голосов
/ 06 февраля 2019

Сначала вам нужно зарегистрировать вас HttpClient:

services.AddHttpClient("signed")
        .ConfigurePrimaryMessageHandler(() =>
        {
            var handler = new HttpClientHandler();
            var certificate = new X509Certificate2(filename: "foo.pfx", password: "123");

            handler.ClientCertificateOptions = ClientCertificateOptions.Manual;
            handler.ClientCertificates.Add(certificat);
        });

В примере файл foo.pfx содержит сертификат с паролем 123 .** подпись * - это имя HttpClient.

Во-вторых, вам нужно позвонить IHttpClientFactory.CreateClient, чтобы создать экземпляр HttpClient.

public class PayClient
{
    private readonly IHttpClientFactory _httpClientFactory;

    public PayClient(IHttpClientFactory httpClientFactory)
    {
        _httpClientFactory = httpClientFactory;
    }

    public async Task SomePayMethodAsync()
    {
        using (httpClient = _httpClientFactory.CreateClient("signed"))
        {
            // use httpClient
        }
    }
}

Вам нужно использовать то же имя подписан как параметр CreateClient.

ПОЗЖЕ ОБНОВЛЕНИЕ

Если вы пишете SAAS со многими сертификатами, вы можете создать и настроить HttpClientвручную каждый раз, когда вам это нужно.Это самый простой способ.

public class PayClient
{
    private readonly ICurrentUserProvider _currentUserProvider;

    public PayClient(ICurrentUserProvider _currentUserProvider)
    {
        _currentUserProvider = currentUserProvider;
    }

    private HttpClient CreateHttpClient()
    {
        var currentUser = _currentUserProvider.CurrentUser;
        var filename = currentUser.CertificateFilename;
        var password = currentUser.CertificatePassword;
        var handler = new HttpClientHandler();
        var certificate = new X509Certificate2(filename, password);

        handler.ClientCertificateOptions = ClientCertificateOptions.Manual;
        handler.ClientCertificates.Add(certificat);

        return new HttpClient(handler);
    }

    public async Task SomePayMethodAsync()
    {
        using (httpClient = CreateHttpClient())
        {
            // use httpClient
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...