.NET Core中Header传播问题:x-request-id名称自动变更
解决.NET Core中HeaderPropagation请求头名称自动规范化的问题
默认情况下,.NET Core的HeaderPropagation中间件在传播请求头时,会自动将头名称转换为HTTP标准的规范化格式(比如把x-request-id转为X-Request-ID),这是因为HttpClient内部会对请求头名称做标准化处理,遵循HTTP头的常规命名约定。
要强制保留原始的小写请求头名称,你需要显式配置HeaderPropagationHeaderOptions,分别指定捕获的头名称和传播时使用的目标名称,而不是直接传入字符串。修改后的代码如下:
services.AddHeaderPropagation(o => { // 显式指定捕获和传播的头名称,避免自动规范化 o.Headers.Add(new HeaderPropagationHeaderOptions { CapturedHeaderName = "x-request-id", OutboundHeaderName = "x-request-id" }); }); services.AddHttpClient<IDataProvider, UmsProvider>((sp, client) => { client.BaseAddress = new Uri("testaddress"); client.Timeout = TimeSpan.FromMinutes(5); }).AddHeaderPropagation();
这段代码的核心是通过HeaderPropagationHeaderOptions明确指定两个参数:
CapturedHeaderName:从当前传入请求中要捕获的头名称(严格匹配小写的x-request-id)OutboundHeaderName:向下游请求发送时使用的头名称(同样使用小写的x-request-id)
这样配置后,中间件就不会自动对请求头名称做规范化处理,确保下游接收到的请求头名称和原始请求一致。
内容的提问来源于stack exchange,提问作者Krishna Pahlajani
相关产品推荐
相关产品推荐

