自定义MVC3缓存过滤器属性

时间:2011-07-25 01:08:17

标签: asp.net-mvc asp.net-mvc-3 caching

我想以某种方式在MVC的动作级别实现缓存。

我知道OutputCache属性,但我无法缓存整个页面。

我想缓存操作返回的模型。

所以基本上,我想创建一个过滤器来阻止调用action方法,但MVC的行为就好像它被调用一样。

假设我计划忽略任何“返回视图(”viewName“)”假设所有将“返回View()”。

2 个答案:

答案 0 :(得分:1)

您可以创建一个继承自ActionFilterAttribute

的过滤器

这就是我使用的

public class CacheControlAttribute : ActionFilterAttribute
{
    public CacheControlAttribute(HttpCacheability cacheability)
    {
        _cacheability = cacheability;
    }

    private readonly HttpCacheability _cacheability;

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
        cache.SetCacheability(_cacheability);
        cache.SetExpires(DateTime.Now);
        cache.SetAllowResponseInBrowserHistory(false);
        cache.SetNoServerCaching();
        cache.SetNoStore();

    }
}

答案 1 :(得分:0)

您可以进行部分缓存。 例如,您可以创建一个不作为常规操作调用的操作方法,而是通过调用Html.RenderPartial()来呈现部分视图(最终为HTML片段)。这样,您不会缓存整个页面,而只会缓存那些变化较少的片段。