我有一個約20個控制器的MVC應用程序。基於登錄用戶緩存部分
在這個應用程序中,我想將某些視圖(主要是部分)緩存60秒,即結果只會每分鐘更改一次,即使底層數據在那一分鐘內發生了變化。
似乎很簡單。
複雜的是,部分顯示依賴於當前登錄用戶的不同數據。我怎樣才能確保緩存是每個用戶使用MVC3?
我有一個約20個控制器的MVC應用程序。基於登錄用戶緩存部分
在這個應用程序中,我想將某些視圖(主要是部分)緩存60秒,即結果只會每分鐘更改一次,即使底層數據在那一分鐘內發生了變化。
似乎很簡單。
複雜的是,部分顯示依賴於當前登錄用戶的不同數據。我怎樣才能確保緩存是每個用戶使用MVC3?
您可以使用OutputCacheAttribute
來影響控制器上的輸出緩存或逐個操作,並使用VaryByCustom
。
[OutputCache(Duration = 60, VaryByParam = "*", VaryByCustom="userName")]
廣場上的控制器,然後進入你的Global.asax.cs並覆蓋GetVaryByCustomString
:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if(arg.ToLower() == 「username」 && context.User.Identity.IsAuthenticated) return context.User.Identity.Name;
return base.GetVaryByCustomString(context, arg);
}
當你說「放在控制器上」我假設你的意思是每個actionmethod? – KingCronus
有三種選擇:1)將它放在單獨的動作上2)將它放在一個控制器上,這將導致每個動作都繼承該過濾器3)將其設置爲全局過濾器,這將導致它應用於每個動作根本不需要修改你的控制器。 http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvcglobalanddynamicactionfilters.aspx – HackedByChinese
太棒了,謝謝你的幫助! – KingCronus
的重複:http://stackoverflow.com/questions/290098/asp-net -mvc-caching-vary-by-authentication – hometoast
[OutputCache控制器屬性可能因用戶角色而異?這是可能的。NET MVC?](http://stackoverflow.com/questions/2289941/outputcache-controller-attribute-vary-by-user-role-is-this-possible-in-net-mvc) – hometoast