当我尝试在 WebRequest
对象上添加 HTTP header 键/值对时,出现以下异常:
This header must be modified using the appropriate property
我已经尝试使用 Add() 方法向 Headers
集合添加新值,但我仍然遇到相同的异常。
webRequest.Headers.Add(HttpRequestHeader.Referer, "http://stackoverflow.com");
我可以通过将 WebRequest 对象转换为 HttpWebRequest 并设置诸如 httpWebReq.Referer ="http://stackoverflow.com"
之类的属性来解决这个问题,但这只适用于少数人通过属性公开的 header 。
我想知道是否有一种方法可以更精细地控制通过请求远程资源修改 header 。
最佳答案
如果您需要简短的技术答案,请直接转到答案的最后一部分。
如果您想了解得更多,请阅读所有内容,希望您会喜欢...
我今天也反驳了这个问题,今天发现的是:
以上答案都是正确的,因为:
1.1 它告诉您您要添加的 header 已经存在,然后您应该使用适当的属性(例如索引器)修改它的值,而不是再次尝试添加它。
1.2 任何时候您要更改
HttpWebRequest
的 header ,您都需要在对象本身上使用适当的属性(如果存在)。
感谢 FOR 和 Jvenema 的领先指南...
但是,我发现,那是拼图中缺失的部分是:
2.1
WebHeaderCollection
类一般通过WebRequest
.Headers或者WebResponse
.Headers来访问。 一些常见的 header 被认为是受限制的,要么直接由 API 公开(例如 Content-Type),要么受系统保护且无法更改。
受限制的 header 是:
接受
连接
内容长度
内容类型
日期
期待
主持人
If-Modified-Since
范围
推荐人
传输编码
用户代理
代理连接
所以,下次当你遇到这个异常并且不知道如何解决这个问题时,请记住有一些受限的 header ,解决方案是使用 WebRequest< 中的适当属性显式修改它们的值
/HttpWebRequest
类。
编辑:(有用,来自评论,用户评论Kaido)
Solution is to check if the header exists already or is restricted (
WebHeaderCollection.IsRestricted(key)
) before calling add
关于c# - 使用 System.Net.WebRequest 时无法设置某些 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239725/