#c# #.net-core #request-headers #polly #httpclientfactory
#c# #.net-core #заголовки запросов #полли #httpclientfactory
Вопрос:
У меня есть именованный клиент, DefaultRequestHeaders
который добавляется на уровне конфигурации следующим образом:
services.AddTransient<ValidateHeaderHandler>();
services.AddHttpClient("WeatherService", client =>
{
client.BaseAddress = new Uri("http://localhost:abcde/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", GetNewAccessToken());
})
.AddPolicyHandler(retryPolicy)
.AddHttpMessageHandler<ValidateHeaderHandler>();
К клиенту добавляется a DelegatingHandler
. Когда я выполняю переопределение в ValidateHeaderHandler
, которое наследует от DelegatingHandler
:
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
if (!request.Headers.Contains("Authorization"))
{ ... }
return await base.SendAsync(request, cancellationToken);
}
Заголовок будет содержать "Authorization"
только при первой попытке base.SendAsync()
. После этого выполнения, если срабатывает политика повтора Polly, ValidateHeaderHandler
переопределение ‘s SendAsync
будет выполняться снова — как и ожидалось — но вся информация заголовка полностью исчезает.
Комментарии:
1. Не могли бы вы поделиться с нами определением
retryPolicy
? Я не смог воспроизвести вашу проблему. Для меняBaseAddress
иHeaders
всегда присутствуют при каждой попытке повтора.