You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中HttpClient多值Header在中间件被合并的问题咨询

问题解决:HttpClient多Header值在.NET Core服务端被合并的处理方法

问题原因

HttpClient遵循HTTP/1.1规范,当向同一个请求Header添加多个值时,会自动将它们合并为单个Header条目,值以逗号分隔后发送到服务端。而ASP.NET Core默认会将这种逗号分隔的内容解析为单个StringValues元素,导致无法区分该值是原本的多Header值,还是单个包含逗号的Header值。

解决方法

方法一:使用自定义分隔符传递多值

发送端将多个值用非逗号的自定义分隔符(如分号;)拼接成单个Header值发送,接收端再按该分隔符拆分:
发送端代码:

var message = new HttpRequestMessage();
message.Headers.Add("Header1", "value1;value2");
await client.SendAsync(message);

接收端代码:

public async Task Invoke(HttpContext httpContext)
{
    var header1Value = httpContext.Request.Headers["Header1"].ToString();
    var values = header1Value.Split(';', StringSplitOptions.RemoveEmptyEntries);
    // values 结果为 ["value1", "value2"]
}

方法二:使用HTTP/2协议发送请求

HTTP/2规范允许同名Header多次出现,不会自动合并。配置HttpClient使用HTTP/2发送请求,服务端即可接收到包含多个元素的StringValues:
发送端配置代码:

var client = new HttpClient(new SocketsHttpHandler
{
    EnableMultipleHttp2Connections = true,
    RequestVersion = HttpVersion.Version20,
    RequestVersionPolicy = HttpVersionPolicy.RequestVersionExact
});

// 发送请求
var message = new HttpRequestMessage();
message.Headers.Add("Header1", "value1");
message.Headers.Add("Header1", "value2");
await client.SendAsync(message);

接收端无需修改代码,httpContext.Request.Headers["Header1"]将直接返回包含两个元素的StringValues。

方法三:序列化多值为JSON字符串

将多个值序列化为JSON字符串后作为Header值发送,接收端反序列化得到原始多值:
发送端代码:

var values = new List<string> { "value1", "value2" };
var jsonValue = System.Text.Json.JsonSerializer.Serialize(values);
var message = new HttpRequestMessage();
message.Headers.Add("Header1", jsonValue);
await client.SendAsync(message);

接收端代码:

public async Task Invoke(HttpContext httpContext)
{
    var header1Value = httpContext.Request.Headers["Header1"].ToString();
    var values = System.Text.Json.JsonSerializer.Deserialize<List<string>>(header1Value);
    // values 结果为 ["value1", "value2"]
}

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:27:21