我想以某种方式在MVC的动作级别实现缓存。
我知道OutputCache属性,但我无法缓存整个页面。
我想缓存操作返回的模型。
所以基本上,我想创建一个过滤器来阻止调用action方法,但MVC的行为就好像它被调用一样。
假设我计划忽略任何“返回视图(”viewName“)”假设所有将“返回View()”。
答案 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片段)。这样,您不会缓存整个页面,而只会缓存那些变化较少的片段。