2011-04-08 71 views
5

我想在我的應用程序中使用緩存,但是我返回的數據是特定於登錄用戶的。當我需要根據用戶進行更改時,我無法使用任何現成的緩存規則。MVC3 custom outputcache

有人能指出我在正確的方向創建自定義緩存屬性。從控制器我可以從Thread.CurrentPrincipal.Identity;訪問用戶或在控制器構造函數中初始化的私有控制器成員_user

謝謝。

回答

9

您可以使用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> 
+8

將是很好的給予[作者](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

+0

http://visitmix.com/writings/using-varybycustom-with-outputcache-in-asp-net-mvc-to-support -caching換登錄用戶 – ulty4life 2012-10-10 01:15:32

0

您應該使用OutputCache.VaryByCustom Property來指定自定義變化字符串。並且要使用它,您應該覆蓋Global.asax中的方法

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if(arg.ToLower() == "currentuser") 
    { 
    //return UserName; 
    } 
    return base.GetVaryByCustomString(context, arg); 
}