如何在metro应用程序中禁用缓存HTTP GET,我正在使用IXMLHTTPRequest2

时间:2012-10-29 22:45:06

标签: microsoft-metro windows-runtime winrt-xaml windows-store-apps winrt-async

我正在做一个http GET来获取数据,我正在使用IXMLHTTPRequest2。

如果我获取网址“http://foo.com”(卷曲“http://foo.com”),第二次我再次获得此网址,服务器上的内容实际上已更改,但我是什么获取是缓存的结果。

缓存似乎只是荣誉URL,因此如果具有相同URL的不同标头,仍然会有相同的缓存结果。 我尝试过“Cache-Control:no-cache”,“Cache Control:no-store”和“Pragma:no-cache”。他们都不被API所尊重。

有没有办法关闭缓存或四处走动? (我正在使用的一个步骤是在URL的末尾添加垃圾,但我感觉不舒服。)

2 个答案:

答案 0 :(得分:3)

Prashant在这里回答了我的问题:http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/1df95d3e-68c9-4351-822a-c2cfde380248/#1df95d3e-68c9-4351-822a-c2cfde380248

您可以通过在请求中设置“If-Modified-Since”HTTP标头并在过去设置时间来强制XHR检索最新内容。 如果您可以控制服务器响应,则可以发送一个过期HTTP响应标头,其值为0或过去的日期。这应该让XHR为您检索最新的响应。

您只需要执行上述操作之一,无需更改客户端和服务器端代码。

客户端代码可以更改为:

xhr->Open(...)
xhr->SetRequestHeader(L"If-Modified-Since", L"Sat, 01 Jan 2000 00:00:01 GMT");
xhr->Send(...)

如果您的服务器端代码基于ASP.net,更改服务器端行为,您可以更改响应标头,如下所示:

Response.Headers.Add("Expires", "0")

答案 1 :(得分:0)

我认为你需要使用套接字.....我认为这两个链接应该有帮助

C# WebClient disable cache

How do I Create an HTTP Request Manually in .Net?