WP7 HttpWebRequest没有缓存

时间:2010-12-16 14:10:47

标签: caching windows-phone-7 httpwebrequest

默认情况下,WP7中的HttpWebRequest缓存似乎已启用,如何将其关闭? 随机添加  param url +“?param =”+ RND.Next(10000)有效,但它非常棘手,我不确定它是否有效  与所有服务器。

7 个答案:

答案 0 :(得分:19)

为了将来参考,这对我有用(由于项目要求,我无法使用其他查询参数):

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

答案 1 :(得分:11)

对于 HttpClient (适用于Windows Phone)“Cache-Control”:服务器端的“no-cache”有时只能工作。而且我也不能将查询字符串随机值添加到RESTful api调用中。

来自@frno的解决方案效果很好,看起来像HttpClient:

client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;

谢谢。

答案 2 :(得分:6)

你怎么知道这是电话,而不是服务器(或介于两者之间的代理)缓存?
你用Fiddler2(或同等版本)检查了这个吗?

您是否尝试过设置标头以禁用缓存? 类似的东西:

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

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

答案 3 :(得分:1)

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

如果我们想要阻止缓存,我们会在请求网址中添加"?nocache=" + DateTime.Now.Ticks.ToString()

答案 4 :(得分:1)

我发现了3种方式

  1. 在URI的末尾添加一个随机查询字符串(想想Guid.NewGuid())这样可以避免在客户端上进行缓存,因为每次查询字符串都不同
  2.   

    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>
        

答案 5 :(得分:0)

添加随机数并不错,它会起作用。我用过Time(在ajax调用中)。被放在网址中的文件夹。

答案 6 :(得分:-2)

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

      HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl);

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