WP7 HttpWebRequest没有缓存

问题描述:

看来HttpWebRequest在WP7缓存是默认启用的,我该如何关闭它? 添加一个随机 参数url +“?param =”+ RND.Next(10000)的作品,但它是相当棘手,我不知道它是否会与所有服务器 工作。WP7 HttpWebRequest没有缓存

+0

发现使用HttpWebRequest对象这个问题一个问题吗?目前提供的答案都是服务器端解决方案。 (除了时间戳,我不喜欢) – invalidusername 2012-01-09 02:07:09

+0

顺便说一句,一个很好的参数是DateTime.Now.Ticks。它会一直改变,它的大小是可以接受的(至少在头几十年:-)) – invalidusername 2012-01-09 02:41:46

你怎么知道这是手机,而不是服务器(或代理之间的某个地方)哪个缓存?
你是否检查过与Fiddler2(或同等学历)?

您是否尝试过设置标头来禁用缓存?
喜欢的东西:

myRequest = (HttpWebRequest)WebRequest.Create(myUri); 

myRequest.Headers["Cache-Control"] = "no-cache"; 
myRequest.Headers["Pragma"] = "no-cache"; 
+2

这不是服务器,因为相同的URL更新corectly在BlackBerry,iPhone和Android – Janci 2010-12-16 14:36:57

+3

更改标头不起作用,不幸的是。 – dethSwatch 2010-12-28 21:23:53

+2

我遇到了这个问题,我正在为WP7应用开发ReSTful端点。更改服务器以确保它返回“Cache-Control”头设置为“no-cache”的响应,从而解决了此问题。 – dwynne 2011-04-06 13:27:30

添加随机数不坏,它会工作。我使用了时间(在Ajax调用中)。被放置在像一个文件夹的网址。

+0

是的,它现在工作,但我不满意这一点,我正在寻找更好的解决方案 – Janci 2010-12-16 14:53:35

+0

与随机数,你可以得到相同的数字,但随着时间(像从午夜的毫秒 - 1至86 400 000)它几乎不可能。你甚至可以把这两个结合起来。你用POST试过了吗? – 2010-12-16 15:41:29

有可能... :)我花了实验的一个星期,答案非常简单:

 HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl); 

    _webRequest.AllowReadStreamBuffering = false 
_webRequest.BeginGetResponse(_onDownload, 
userState); 
+0

它不能解决缓存问题。 – 2011-05-28 18:07:09

+0

不解决问题+抛出内部异常“不支持”。 – 2012-03-04 16:50:43

以供将来参考,这个工作对我来说(我不能因使用额外的查询参数项目要求):

 HttpWebRequest request = HttpWebRequest.CreateHttp(url); 
     if (request.Headers == null) 
     { 
      request.Headers = new WebHeaderCollection(); 
     } 
     request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString(); 
+1

作品。不知道为什么。 – 2012-03-04 16:55:16

+0

@Agent_L WP7 HTTP客户端的请求看起来不同 – SandRock 2012-03-30 09:12:51

我们已经看到了与Chrome托管的Silverlight相同的行为。

如果我们想要防止缓存,我们会在我们的请求URL中添加一个"?nocache=" + DateTime.Now.Ticks.ToString()

HttpClient(便携式Windows Phone)“Cache-Control”:服务器端的“no-cache”有时仅适用。而且我也无法将查询字符串随机值添加到RESTful API调用中。从@frno做工不错,看起来像的HttpClient

解决方案:

client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow; 

谢谢。

+1

这是唯一对我有用的方法。其他缓存标头似乎没有效果。 – 2013-08-31 14:40:17

+0

非常好的解决方案,也适用于Windows 8.1 Store Universal应用程序。 – NBoymanns 2014-07-07 11:09:32

+0

这是为我们工作,现在它不时抛出304s。 – 2014-08-07 18:22:12

我发现3种方式

  1. 添加一个随机的查询字符串的URI的末尾(想想Guid.NewGuid()),这将避免在客户端上的缓存作为查询字符串每次都会有所不同

string uri =“http://host.com/path?cache=”+ Guid.NewGuid()。的ToString();

  1. 指定WCF服务操作中在OutgoingResponse头没有高速缓存:
  2. var __request = (HttpWebRequest)WebRequest.Create(url.ToString()); 
    if (__request.Headers == null) 
        __request.Headers = new WebHeaderCollection(); 
    __request.Headers.Add("Cache-Control", "no-cache"); 
    
    1. 使用AspNetCacheProfile属性标记您的服务操作:
    2. [AspNetCacheProfile("GetContent")] 
      public ResultABC GetContent(string abc) 
      { 
          __request = (HttpWebRequest)WebRequest.Create(abc); 
          return __request; 
      } 
      

      和更新您的web.config

      <system.web> 
      <caching> 
          <outputCache enableOutputCache="true" /> 
          <outputCacheSettings> 
           <outputCacheProfiles > 
            <add name="GetContent" duration="0" noStore="true" location="Client" varyByParam="" enabled="true"/> 
           </outputCacheProfiles> 
          </outputCacheSettings> 
      </caching> 
      ... 
      </system.web> 
      
    开始=>
开始=>