1

美好的一天,我有这个应用程序可以读取 7 个小 xml 并存储结果,但现在它会下载所有内容,即使 xml 文件未更改。

我很想检查 xml 是否更新或已修改,但我找不到解决方案,也许这是一个简单的解决方案,我正试图以更难的方式实现这一目标

有人可以帮忙吗?

谢谢'的建议:)

这是我的ATM代码:

WebClient downloader = new WebClient();
downloader.DownloadStringAsync(new Uri("http://feeds.feedburner.com/bluey/eventi20" + "?" + System.DateTime.Now.ToString(), UriKind.RelativeOrAbsolute));
downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(EventiDownloaded);

我尝试以这种方式在 xml 的标头中查找 lastmodify 或我可以使用的东西

WebClient downloader = new WebClient();
downloader.DownloadStringAsync(new Uri("http://feeds.feedburner.com/bluey/eventi20" + "?" + System.DateTime.Now.ToString(), UriKind.RelativeOrAbsolute));
downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(EventiDownloaded);
WebHeaderCollection myWebHeaderCollection = downloader.ResponseHeaders;
 foreach(var x in myWebHeaderCollection)
   for (int i = 0; i < myWebHeaderCollection.Count; i++)
      MessageBox.Show("\t" + myWebHeaderCollection.AllKeys.GetEnumerator() + " = " + myWebHeaderCollection.AllKeys.ElementAt(i));

但我在 myWebHeaderCollection 中得到一个空引用错误

4

1 回答 1

0

也许你可以尝试使用 ETag http://en.wikipedia.org/wiki/HTTP_ETag

您可以仅请求标头(而不是全部内容)并获取 ETag 并保存该值。因此,您应该只在 ETag 更改时才执行完整请求。我个人没有这样做过。我和你有同样的问题,但我的提要每周更新一次,所以我做了一些不涉及这个实现的解决方法。

无论如何,这是一个演示仅标头请求的快速示例,您应该看到 ETag 并且您可以提取值以供您使用。

static void Main(string[] args)
{
    WebRequest webRequest = HttpWebRequest.Create("http://www.forexfactory.com/ffcal_week_this.xml");

    // Only request the headers, not the whole content
    webRequest.Method = "HEAD";
    var response = webRequest.GetResponse();

    for (int i = 0; i < response.Headers.Count; i++)
    {
        Console.WriteLine(response.Headers.Keys[i] + " : " + response.Headers[i]);
    }

    Console.Read();
}
于 2013-03-30T19:06:33.433 回答