【发布时间】:2015-07-17 08:18:50
【问题描述】:
我正在使用 Rest API 开发移动应用程序。我正在使用异步调用,因为 Windows Phone 8 开发不支持 GetResponse 方法。
当我启动应用程序时,它使用 GET 方法获取正确的数据。我已经实现了 60 秒的刷新间隔。当刷新触发时,我收到的 JSON 输出不是新的,而是最初获取的。基本上不会让人耳目一新。我浏览了这里的一些博客,发现这是缓存的问题。我需要有关禁用此缓存的帮助。另外,我检查并发现 HttpRequestCachePolicy 不能用作 System.Net.Cache 框架中不存在(我是开发新手,如果我在这里错了,请纠正我)
下面是我正在使用的代码。
请求创建:
string AuthServiceUri = "http://" + Authentication.ipAddress + "/api/alerts/open";
HttpWebRequest alerts_request = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
alerts_request.Accept = "application/json";
alerts_request.Method = "GET";
alerts_request.Headers["AuthToken"] = Authentication.authToken;
alerts_request.BeginGetResponse(new AsyncCallback(AlertsGetResponsetStreamCallback), alerts_request);
GetResponseStreamCallback:
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
response.Headers["Cache-Control"] = "no-cache";
string responseString = "";
Stream streamResponse = response.GetResponseStream();
StreamReader reader = new StreamReader(streamResponse);
responseString = reader.ReadToEnd();
streamResponse.Close();
reader.Close();
response.Close();
string result = responseString;
代码可以很好地获取结果。只是我在清除缓存时遇到了麻烦。我是否通过将“无缓存”添加到标题中来正确实现它?还是我错过了什么?它也应该添加到标题中吗?做我的救星!!
【问题讨论】:
-
我认为您的术语在这里混淆了?我很确定您不能仅从 http 响应标头中清除浏览器缓存。要在浏览器中强制“不缓存”特定请求,请参阅stackoverflow.com/questions/49547/…
-
我之前浏览过那个博客。但是,它不包含实现异步调用的答案。我知道我有点落后,因为我刚刚进入开发阶段。无论如何,我试图实现博客中的建议: response.Headers["Cache-Control"] = "no-cache, no-store, must-revalidate"; response.Headers["Pragma"] = "无缓存"; response.Headers["Expires"] = "0";还是没有金子:(
标签: c# caching windows-phone httpwebrequest no-cache