标头传播.net core

问题描述 投票:0回答:1

我正在尝试传播http标头“x-request-id”。

services.AddHeaderPropagation(o =>
        {
            // Propagate if 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”。

c# .net asp.net-core .net-core http-headers
1个回答
0
投票

您遇到的行为(其中标头名称“x-request-id”在下游 HTTP 调用中更改为“X-Request-ID”)可能是由于默认情况下 HTTP 标头名称自动标准化为 PascalCase ASP.NET Core。

为了防止这种自动标准化并保持标头名称不变,您可以将 HttpClient 配置为使用自定义标头名称转换。具体方法如下:

  1. 创建 IHttpHeaderPropagation 的自定义实现来指定自定义标头名称转换逻辑。

    公共类 CustomHeaderPropagation :IHttpHeaderPropagation { 公共异步任务AddHeadersAsync(HttpContext上下文, HttpResponse消息响应) { // 您在此处传播标头的自定义逻辑。 } }

  2. 在 Startup.cs 中配置自定义标头传播:

    services.AddSingleton();

通过创建自定义 IHttpHeaderPropagation 实现,您可以完全控制标头的传播方式,并可以防止“x-request-id”标头名称的自动 PascalCase 规范化。您可以在 CustomHeaderPropagation 类中实现自定义逻辑来按原样处理标头

© www.soinside.com 2019 - 2024. All rights reserved.