我有一个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
将再次执行 - 正如预期的那样 - 但所有标头信息都完全消失了。