Переопределение политик HttpClientFactory, определенных с помощью Polly - PullRequest
0 голосов
/ 24 января 2020

С. net Core 2+ MS дала нам возможность добавить политики в HttpClient, которые будут работать, пока клиент вводится через контейнер IO C. Но это привело меня к сомнению, которое я не могу понять, когда бесконечно гуглю. Что если мы хотим переопределить политики HttpClient, продолжая использовать HttpClientFactory и DI для внедрения клиента в поставщика? Можем ли мы «отключить» политики для определенного c запроса или мы можем добавить дополнительные политики, переопределяя глобальные политики, определенные при запуске?

1 Ответ

1 голос
/ 24 января 2020

Используйте разные именованные клиенты или типизированные клиенты для определения отдельных логических HttpClient конфигураций.

ИЛИ

При настройке политик с использованием IHttpClientFactory вы можете использовать .AddPolicyHandler(...) перегрузки или .AddPolicyHandlerFromRegistry(...) перегрузки , которые позволяют выбирать политику на основе информации в HttpRequestMessage. Это может позволить изменять политики, применяемые для разных запросов.

Чтобы взять пример из документации Polly и HttpClientFactory , одним из вариантов использования может быть применение политики Retry только к запросам GET, но не другие http глаголы:

var retryPolicy = HttpPolicyExtensions
    .HandleTransientHttpError()
    .WaitAndRetryAsync(new[]
    {
        TimeSpan.FromSeconds(1),
        TimeSpan.FromSeconds(5),
        TimeSpan.FromSeconds(10)
    });
var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy<HttpResponseMessage>();

services.AddHttpClient(/* etc */)
    // Select a policy based on the request: retry for Get requests, noOp for other http verbs.
    .AddPolicyHandler(request => request.Method == HttpMethod.Get ? retryPolicy : noOpPolicy);
...