Почему я теряю свои DefaultRequestHeaders с помощью DelegatingHandler?

#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 всегда присутствуют при каждой попытке повтора.