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

C#中如何为HTTPRequestMessage添加含冒号的Header值?

在C# HTTP请求中添加含冒号的Header值

你遇到的问题是直接添加含冒号的Header值会触发System.FormatException,而用Uri.EscapeDataString转义后冒号会被替换为%3A,导致API无法通过冒号拆分内容。

解决方法是使用跳过格式验证的Header添加方法:

代码示例

用HttpClient的情况

string auth_string = this.user + ":" + this.token;
// 跳过格式验证,直接添加原始值
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", auth_string);

用HttpRequestMessage的情况

string auth_string = this.user + ":" + this.token;
// 同样跳过验证添加
requestMessage.Headers.TryAddWithoutValidation("Authorization", auth_string);

原理说明

默认的Add方法会严格遵循HTTP规范验证Header值格式,冒号属于规范中定义的特殊分隔符,因此直接添加会触发异常。而TryAddWithoutValidation方法会跳过格式校验逻辑,直接将原始值写入请求Header,既能保留冒号,又不会抛出格式错误。

注意:如果是标准HTTP认证头(比如Basic Auth),建议使用框架提供的认证机制(如HttpClientHandler.Credentials);但如果是自定义的Header格式,上述方法是最直接的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:12:52