2012-06-05 50 views
1

我的目標是擁有一個全局的NoCacheActionFilter屬性(在Global.asax.cs中註冊),默認情況下會禁用緩存。在Global ActionFilter中定義的覆蓋緩存

然後我想在加上我的控制器所需要的操作我想補充一個緩存屬性,它應該覆蓋全球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之間的區別,他們應該是在oth之後援引一個呃,所以應該批准這個命令。

但是,顯然這個不是工作。有什麼建議麼??我有這種感覺錯過了一些微不足道的事情......

回答

0

只是一個猜測。在更改filterContextCache對象後,您是否調用基本過濾器類的方法?

... 
    base.OnActionExecuting(filterContext); 
} 

... 
    base.OnActionExecuted(filterContext); 
} 
+0

都能跟得上...不幸的是增加它並沒有改變行爲......還是全局緩存沒有被覆蓋。是否有一個約束,即全局動作過濾器總是勝過那些專門在控制器動作中聲明的那些? (雖然這真的很尷尬) – Juri