我使用WebClient
来检索网站。我决定把If-Modified-Since
因为如果网站没有改变,我不希望再得到它:无法在WebClient上设置If-Modified-Since?
var c = new WebClient();
c.Headers[HttpRequestHeader.IfModifiedSince] = Last_refreshed.ToUniversalTime().ToString("r");
凡Last_refreshed
是我存放我最后一次看到网站上的时间的变量。
但是当我运行它,我得到一个WebException
与文本:
The 'If-Modified-Since' header must be modified using the appropriate property or method.
Parameter name: name
原来,API docs mention this:使用WebClient
对象时
此外,还有一些其他的头部也受到限制。这些受限制的接头连接器包括,但不限于以下:
- 接受
- 连接
- 的Content-Length
- 期望(当此值被设置为 “100-继续”)
- 如果-Modified-Since的
- 范围
- 传输编码
HttpWebRequest
类具有设置上述某些标题的属性。如果应用程序设置这些标题很重要,则应该使用HttpWebRequest
类而不是WebRequest
类。
那么这是否意味着无法将它们设置为WebClient
?为什么不?在正常的HTTP GET
中指定If-Modified-Since
有什么不对?
我知道我可以使用HttpWebRequest
,但我不想因为它太多的工作(必须做一堆投射,不能只将内容作为字符串获取)。
此外,我知道Cannot set some HTTP headers when using System.Net.WebRequest是相关的,但它并没有真正回答我的问题。