WebRequest添加Accept头报错:需用对应属性/方法,Postman正常MVC异常
解决WebRequest设置Accept头时的"The 'Accept' header must be modified using the appropriate property or method."错误
我来帮你搞定这个问题!你遇到的这个报错,核心原因是**WebRequest(底层实际是HttpWebRequest)对Accept这类标准HTTP请求头,要求通过专门的属性来设置,不能直接操作Headers集合**。
你看,像Accept、Content-Type这类常见的HTTP头,.NET框架为HttpWebRequest提供了对应的强类型属性,直接用这些属性赋值才是合规的操作。你原来的代码里用req.Headers.Add("Accept", "..."),这就触发了框架的限制,导致抛出那个错误。
修正后的代码片段
咱们把Accept头的设置改成用Accept属性,其他头的设置保持不变就可以了:
WebRequest req = WebRequest.Create(@"url"); req.Method = "GET"; // Authorization没有对应的专属属性,直接通过Headers设置是正确的 req.Headers["Authorization"] = "Basic " + "QzdBQUNFO"; req.ContentType = "application/vnd.onem2m-res+json"; // 重点:用Accept属性替代Headers.Add设置Accept头 req.Accept = "application/vnd.onem2m-res+json;"; req.Headers["Cache-Control"] = "no-cache"; req.Headers["X-M2M-RI"] = "9900001"; req.Headers["X-M2M-Origin"] = "C7AACE9-25"; HttpWebResponse resp = req.GetResponse() as HttpWebResponse; var encoding = resp.CharacterSet == "" ? Encoding.UTF8 : Encoding.GetEncoding(resp.CharacterSet);
补充说明
- 对于
Content-Type,你原来用req.ContentType赋值是正确的,这也是框架推荐的方式; - 像
Authorization、Cache-Control、X-M2M-RI这类没有对应专属属性的头,直接通过Headers集合设置是没问题的; - Postman能正常请求是因为它没有.NET框架里的这个限制,直接发送原始请求头即可。
内容的提问来源于stack exchange,提问作者krishna mohan
相关产品推荐
相关产品推荐

