清除客户端输出缓存

3
如标题所述,我该如何在客户端清除输出缓存(Outputcache)?在用户执行特定操作后,我有几个需要清除的ajax调用。
我尝试过:
Response.RemoveOutputCacheItem(Url.Action("Action", "Controller"));

但是它没有起作用。

我甚至尝试手动过期它(尽管这是一个不好的方法):

                Response.Expires = 0;
                Response.ExpiresAbsolute = DateTime.Now.AddMinutes(-1);
                Response.AddHeader("pragma", "no-cache");
                Response.AddHeader("cache-control", "private");
                Response.CacheControl = "no-cache";

那也没起作用。

为了明确起见,我正在使用 OutputcacheLocation = Client。如果我将其设置为 Server,上面的示例将完美运行。

2个回答

3
如果您需要进行ajax调用,即使使用相同的参数时也可以返回不同的数据而不受缓存的影响,唯一可靠的方法是在查询字符串中添加另一个变量,该变量始终不同,例如毫秒级时间戳。
以下是我如何处理它(使用no_cache参数):
<script type="text/javascript">
Date.prototype.getTicksUTC = function() 
{
    return Date.parse(this.toUTCString()) + this.getUTCMilliseconds();
} // End Function getTicksUTC


Date.prototype.getTicksGMT = function() 
{
    return Date.parse(this.toGMTString()) + this.getMilliseconds();
} // End Function getTicksGMT

var strURL= "http://localhost/ajax/whateverhandler.ashx?param1=value1&para2=value2&paraN=valueN&no_cache=" + new Date().getTicksUTC();
alert(strURL);

</script> 

但这样并不等同于将其定义为NoCache,有没有办法告诉客户端的浏览器清除缓存呢? - AdrianoRR
@AdrianoRR:不,这不一样。首先,客户端可以忽略NoCache。其次,其他所有内容仍然被缓存,只是ajax调用没有被缓存。 - Stefan Steiger
1
我理解你的意思,但我想在某些特定操作后清除客户端缓存。从你的例子中,我没有看到那个ajax调用中的缓存,因为你设置了一个不断变化的时间戳。我相信这就是jQuery的$.ajax所做的事情。我需要缓存保留一段时间,并在我告诉它之后清除。无论如何,谢谢。 - AdrianoRR
@AdrianoRR:然后您继续使用同样的no_cache参数,直到您需要一个新的。 - Stefan Steiger
现在我明白你的意思了。每当我需要更新缓存时,我只需调用 Date.prototype.getTicksUTC 并生成另一个无缓存页面,对吧?这样,我就可以“控制”客户端缓存,对吧?我会尝试这个方法,如果有效,我会采纳你的答案。 - AdrianoRR
显示剩余3条评论

-2

不行。一旦你将缓存位置设置为客户端,你就把管理的责任交给了客户端。


如果是这样,您将如何根据不同的用户更改缓存并仍允许他们更改数据? - AdrianoRR
2
你能提供一些你阅读过的参考资料吗?这些资料是否提到了客户端缓存无法通过HttpResponse被清除的问题?谢谢。 - AdrianoRR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接