WP7 HttpWebRequest没有缓存
看来HttpWebRequest在WP7缓存是默认启用的,我该如何关闭它? 添加一个随机 参数url +“?param =”+ RND.Next(10000)的作品,但它是相当棘手,我不知道它是否会与所有服务器 工作。WP7 HttpWebRequest没有缓存
你怎么知道这是手机,而不是服务器(或代理之间的某个地方)哪个缓存?
你是否检查过与Fiddler2(或同等学历)?
您是否尝试过设置标头来禁用缓存?
喜欢的东西:
myRequest = (HttpWebRequest)WebRequest.Create(myUri);
myRequest.Headers["Cache-Control"] = "no-cache";
myRequest.Headers["Pragma"] = "no-cache";
这不是服务器,因为相同的URL更新corectly在BlackBerry,iPhone和Android – Janci 2010-12-16 14:36:57
更改标头不起作用,不幸的是。 – dethSwatch 2010-12-28 21:23:53
我遇到了这个问题,我正在为WP7应用开发ReSTful端点。更改服务器以确保它返回“Cache-Control”头设置为“no-cache”的响应,从而解决了此问题。 – dwynne 2011-04-06 13:27:30
添加随机数不坏,它会工作。我使用了时间(在Ajax调用中)。被放置在像一个文件夹的网址。
是的,它现在工作,但我不满意这一点,我正在寻找更好的解决方案 – Janci 2010-12-16 14:53:35
与随机数,你可以得到相同的数字,但随着时间(像从午夜的毫秒 - 1至86 400 000)它几乎不可能。你甚至可以把这两个结合起来。你用POST试过了吗? – 2010-12-16 15:41:29
有可能... :)我花了实验的一个星期,答案非常简单:
HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl);
_webRequest.AllowReadStreamBuffering = false
_webRequest.BeginGetResponse(_onDownload,
userState);
它不能解决缓存问题。 – 2011-05-28 18:07:09
不解决问题+抛出内部异常“不支持”。 – 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();
作品。不知道为什么。 – 2012-03-04 16:55:16
@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;
谢谢。
这是唯一对我有用的方法。其他缓存标头似乎没有效果。 – 2013-08-31 14:40:17
非常好的解决方案,也适用于Windows 8.1 Store Universal应用程序。 – NBoymanns 2014-07-07 11:09:32
这是为我们工作,现在它不时抛出304s。 – 2014-08-07 18:22:12
我发现3种方式
- 添加一个随机的查询字符串的URI的末尾(想想Guid.NewGuid()),这将避免在客户端上的缓存作为查询字符串每次都会有所不同
string uri =“http://host.com/path?cache=”+ Guid.NewGuid()。的ToString();
- 指定WCF服务操作中在OutgoingResponse头没有高速缓存:
- 使用AspNetCacheProfile属性标记您的服务操作:
var __request = (HttpWebRequest)WebRequest.Create(url.ToString()); if (__request.Headers == null) __request.Headers = new WebHeaderCollection(); __request.Headers.Add("Cache-Control", "no-cache");
[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>
发现使用HttpWebRequest对象这个问题一个问题吗?目前提供的答案都是服务器端解决方案。 (除了时间戳,我不喜欢) – invalidusername 2012-01-09 02:07:09
顺便说一句,一个很好的参数是DateTime.Now.Ticks。它会一直改变,它的大小是可以接受的(至少在头几十年:-)) – invalidusername 2012-01-09 02:41:46