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
相关产品推荐
相关产品推荐

