2

我有一个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>();

添加到客户端的是一个DelegatingHandler. 当我逐步完成 ValidateHeaderHandler 中的覆盖时,它继承自 DelegatingHandler:

protected override async Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request,
    CancellationToken cancellationToken)
{
    if (!request.Headers.Contains("Authorization"))
    { ... }
    return await base.SendAsync(request, cancellationToken);
}

仅在第一次尝试时,标头才会包含“授权”base.SendAsync()。执行之后,如果 Polly 的重试策略被触发,ValidateHeaderHandler 的覆盖SendAsync将再次执行 - 正如预期的那样 - 但所有标头信息都完全消失了。

4

0 回答 0