为HttpRequestMessage添加指定Accept头触发格式异常求助
解决System.FormatException:Accept头格式无效的问题
这个错误是因为System.Net.Http的HTTP头解析器对multipart/related类型的Accept头有严格的格式要求,直接手动拼接字符串会触发解析失败。下面是两种可靠的解决方法:
方法一:使用强类型Header对象(推荐)
.NET提供了专门的MultipartRelatedMediaTypeHeaderValue类来构造这种类型的Accept头,能确保格式完全符合HTTP规范,避免手动拼接的错误:
var request = new HttpRequestMessage(HttpMethod.Get, new Uri("http://someurl")); // 创建multipart/related类型的Accept头实例 var acceptHeader = new MultipartRelatedMediaTypeHeaderValue("multipart/related"); // 添加type参数,指定子类型为application/octet-stream acceptHeader.Parameters.Add(new NameValueHeaderValue("type", "application/octet-stream")); // 将构造好的头添加到请求中 request.Headers.Accept.Add(acceptHeader);
方法二:手动修正字符串格式
如果你坚持用字符串直接添加,需要给type参数的值加上双引号(HTTP规范中参数值如果需要明确边界时必须用引号包裹,这里解析器强制要求):
var request = new HttpRequestMessage(HttpMethod.Get, new Uri("http://someurl")); // 注意type的值被双引号包裹 request.Headers.Add("Accept", "multipart/related;type=\"application/octet-stream\"");
为什么之前的代码会报错?
System.Net.Http的头解析逻辑会严格校验HTTP头的格式,对于multipart/related这类带参数的媒体类型,解析器期望参数值被双引号包裹。你之前的字符串没有加引号,导致解析器判定格式无效,抛出FormatException。
内容的提问来源于stack exchange,提问作者Shankar S
相关产品推荐
相关产品推荐

