覆盖Global ActionFilter中定义的缓存

时间:2012-06-05 06:55:29

标签: asp.net-mvc-3 cache-control action-filter

我的目标是拥有一个全局NoCacheActionFilter属性(在Global.asax.cs中注册),默认情况下禁用缓存。

然后我想在控制器所需的动作中添加更细粒度的控件我想添加缓存属性,该属性应该覆盖全局{中定义的属性{ {1}}。

我的方法

NoCacheActionFilter

中的

NoCacheActionFilter

缓存属性 ...

public override void OnActionExcecuting(ActionExecutingContext filterContext)
{
    //disable caching
    HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
    cache.SetCacheability(HttpCacheability.NoCache);
    ...
}

请注意public override void OnActionExecuted(ActionExecutedContext filterContext) { //add caching ... cache.SetCacheability(HttpCacheability.Public); ... } OnActionExecuting之间的区别,它们应该一个接一个地调用,因此应该授予顺序。

然而,显然有效。有什么建议??我有一种错过一些微不足道的感觉......

2 个答案:

答案 0 :(得分:0)

只是一个猜测。更改Cache的{​​{1}}对象后,您是否调用了基本过滤器类的方法?

filterContext

    ...
    base.OnActionExecuting(filterContext);
}

答案 1 :(得分:-1)

可能是过滤器运行的顺序不是您所期望的。

查看此博客文章,其中解释了它们的运行顺序: http://blog.rajsoftware.com/post/2011/05/14/MVC3-Filter-Ordering.aspx