ASP.NET MVC2和浏览器缓存

时间:2010-05-21 16:20:43

标签: caching asp.net-mvc-2 http-headers

我有一个通过ajax获取大量内容的Web应用程序。例如,当用户编辑某些数据时,浏览器将使用ajax帖子发送更改,然后执行ajax获取新内容并使用该内容替换页面上的现有div。这只是用MVC1找到的,但在MVC2中我会得到不一致的结果。

我发现MVC1默认包含设置为当前时间的响应头中的Expires项,但在MVC2中缺少Expires头。这是一些浏览器(IE8)实际使用ajax get的缓存版本而不是新版本的问题。

为了解决这个问题,我创建了一个简单的ActionFilterAttribute,它将响应缓存设置为NoCache(见下文),这是有效的,但用这个属性装饰每个控制器似乎有点狡猾。是否有一种全局方式为每个控制器设置此功能?

这是MVC2中的错误,它应该在每个ActionResult / view / page上设置过期吗?大多数MVC程序是否处理过时数据非常糟糕的数据输入?

由于


public class ResponseNoCachingAttribute : ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);

        filterContext.HttpContext.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
    }
}

1 个答案:

答案 0 :(得分:4)

您是否尝试将以下属性添加到控制器?

[OutputCache(Location = OutputCacheLocation.None)]