2

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

然后我想在我的控制器所需的操作上添加更细粒度的控制,我想添加一个缓存属性,该属性应该覆盖在 global 中定义的属性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);
    ...
}

注意 和 之间的区别OnActionExecutingOnActionExecuted它们应该一个接一个地调用,因此应该授予顺序。

但是,显然这不起作用。有什么建议么??有种想念一些微不足道的感觉...

4

2 回答 2

0

只是一个猜测。更改Cache对象后,filterContext您会调用基本过滤器类的方法吗?

    ...
    base.OnActionExecuting(filterContext);
}

    ...
    base.OnActionExecuted(filterContext);
}
于 2012-06-08T11:57:26.397 回答
0

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

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

于 2012-06-22T20:38:48.903 回答