我在IIS 7.5上运行了一个ASP MVC 3站点,我无法阻止它进行缓存。
我已经通过向网站添加“* Do Not Cache”条目禁用了IIS中的输出缓存,并且还在控制器上添加了一个动作过滤器,用于阻止缓存的结果执行(请参阅下面的代码)但是当我使用网站,它仍在缓存。我已从Internet Explorer和Firefox中删除了所有历史记录和Cookie等,但我仍然看到旧数据。
有没有人有任何想法或建议我还能采取什么措施来阻止这种情况?
提前致谢,
詹姆斯
更新
我使用SQL分析器进一步挖掘它似乎是缓存查询的SQL服务器。可能是这种情况吗?
第二次更新
我现在知道definitley是不是SQL缓存,现在正在查看IIS和MVC
解决!!!
这是NHibernate!
每个呼叫使用相同的会话而不是每个请求的会话。
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation (HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
答案 0 :(得分:2)
您可以尝试将OutputCach属性添加到操作中,并将持续时间设置为几秒钟。 例如: [OutputCache(Duration = 1,VaryByParam =“none”)]
答案 1 :(得分:1)
你是通过JQuery ajax调用你的MVC动作吗?如果是这样,请参阅:http://www.peteonsoftware.com/index.php/2010/08/20/the-importance-of-jquery-ajaxsetup-cache/
答案 2 :(得分:0)
它不像浏览器缓存本身的问题那么简单吗? 尝试添加no-cache元标记?
<HTML><HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</HEAD><BODY>
</BODY>
</HTML>
只是想一想,你也可以设置no-cache标头。也许使用Fiddler检查浏览器没有缓存响应。
答案 3 :(得分:0)
<强>解决!!! 强>
这是NHibernate!
每个呼叫使用相同的会话而不是每个请求的会话。