2011-07-25 24 views
0

MVCのアクションレベルで特定の方法でキャッシュを実装したいと思います。カスタムMVC3キャッシュフィルタ属性

私はOutputCache属性を認識していますが、ページ全体をキャッシュできません。

アクションによって返されたモデルをキャッシュしたいと思います。

基本的には、アクションメソッドが呼び出されないようにするフィルタを作成したいのですが、呼び出されたかのようにMVCを動作させるようにします。

すべてが "返されたView()"であると仮定して、 "return View(" viewName ")を無視することを前提とします。

答えて

0

部分的なキャッシュが可能です。 たとえば、通常のアクションとして呼び出されるのではなく、Html.RenderPartial()を呼び出して部分的な表示(最終的にはHTMLスニペット)をレンダリングするアクションメソッドを作成できます。そうすれば、ページ全体をキャッシュするのではなく、あまり頻繁に変更されないフラグメントだけをキャッシュすることができます。

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(); 

    } 
}