我正在尝试传播 HTTP 标头“x-request-id”。
services.AddHeaderPropagation(o =>
{
// Propagate if the header exists
o.Headers.Add("x-request-id");
});
services.AddHttpClient<IDataProvider, UmsProvider>((sp, client) =>
{
client.BaseAddress = new Uri("testaddress");
client.Timeout = TimeSpan.FromMinutes(5);
}).AddHeaderPropagation();
上面的代码确实传播了标头,但标头名称“x-request-id”在下游 HTTP 调用中更改为“X-Request-ID”。
您遇到的行为(其中标头名称“x-request-id”在下游 HTTP 调用中更改为“X-Request-ID”)可能是由于默认情况下 HTTP 标头名称自动标准化为 PascalCase ASP.NET Core。
为了防止这种自动标准化并保持标头名称不变,您可以将 HttpClient 配置为使用自定义标头名称转换。具体方法如下:
创建 IHttpHeaderPropagation 的自定义实现来指定自定义标头名称转换逻辑。
公共类 CustomHeaderPropagation :IHttpHeaderPropagation { 公共异步任务AddHeadersAsync(HttpContext上下文, HttpResponse消息响应) { // 您在此处传播标头的自定义逻辑。 } }
在 Startup.cs 中配置自定义标头传播:
services.AddSingleton
通过创建自定义 IHttpHeaderPropagation 实现,您可以完全控制标头的传播方式,并可以防止“x-request-id”标头名称的自动 PascalCase 规范化。您可以在 CustomHeaderPropagation 类中实现自定义逻辑来按原样处理标头