我想在我的應用程序中使用緩存,但是我返回的數據是特定於登錄用戶的。當我需要根據用戶進行更改時,我無法使用任何現成的緩存規則。MVC3 custom outputcache
有人能指出我在正確的方向創建自定義緩存屬性。從控制器我可以從Thread.CurrentPrincipal.Identity;
訪問用戶或在控制器構造函數中初始化的私有控制器成員_user
謝謝。
我想在我的應用程序中使用緩存,但是我返回的數據是特定於登錄用戶的。當我需要根據用戶進行更改時,我無法使用任何現成的緩存規則。MVC3 custom outputcache
有人能指出我在正確的方向創建自定義緩存屬性。從控制器我可以從Thread.CurrentPrincipal.Identity;
訪問用戶或在控制器構造函數中初始化的私有控制器成員_user
謝謝。
您可以使用VaryByCustom。在Global.asax中重寫GetVaryByCustomString
方法:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "IsLoggedIn")
{
if (context.Request.Cookies["anon"] != null)
{
if (context.Request.Cookies["anon"].Value == "false")
{
return "auth";
}
else
{
return "anon";
}
}
else
{
return "anon";
}
}
else
{
return base.GetVaryByCustomString(context, arg);
}
}
,然後使用的OutputCache屬性:
[OutputCache(CacheProfile = "MyProfile")]
public ActionResult Index()
{
return View();
}
,並在web.config中:
<caching>
<outputcachesettings>
<outputcacheprofiles>
<clear />
<add varybycustom="IsLoggedIn" varybyparam="*" duration="86400" name="MyProfile" />
</outputcacheprofiles>
</outputcachesettings>
</caching>
您應該使用OutputCache.VaryByCustom Property來指定自定義變化字符串。並且要使用它,您應該覆蓋Global.asax中的方法
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if(arg.ToLower() == "currentuser")
{
//return UserName;
}
return base.GetVaryByCustomString(context, arg);
}
的授權屬性有一些有趣的事情繼續關注授權與非授權用戶的緩存。您可能能夠提取它的邏輯並將其修改爲對每個授權用戶進行緩存,而不僅僅是「用戶已被授權」。
退房這個帖子:
Can someone explain this block of ASP.NET MVC code to me, please?
將是很好的給予[作者](http://visitmix.com/writings/using-varybycustom-with-outputcache-in-asp-net -mvc-to-support-caching-for-logged-in-users)credit;) – balexandre 2011-11-16 22:09:46
http://visitmix.com/writings/using-varybycustom-with-outputcache-in-asp-net-mvc-to-support -caching換登錄用戶 – ulty4life 2012-10-10 01:15:32