2011-04-08 7 views
5

Me gustaría usar el caché en mi aplicación, pero los datos que estoy devolviendo son específicos del usuario que ha iniciado sesión. No puedo usar ninguna de las reglas de caché listas para usar cuando necesito variar según el usuario.Caché de salida personalizada MVC3

¿Puede alguien señalarme en la dirección correcta al crear un atributo de almacenamiento en caché personalizado. Desde el controlador puedo acceder al usuario desde Thread.CurrentPrincipal.Identity; o un miembro del controlador privado que inicializo en el constructor del controlador _user

Gracias.

Respuesta

9

Se podría utilizar el VaryByCustom. En Global.asax anular el método 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); 
    } 
} 

y luego usar el atributo OutputCache:

[OutputCache(CacheProfile = "MyProfile")] 
public ActionResult Index() 
{ 
    return View(); 
} 

y en web.config:

<caching> 
    <outputcachesettings>    
     <outputcacheprofiles> 
      <clear /> 
      <add varybycustom="IsLoggedIn" varybyparam="*" duration="86400" name="MyProfile" /> 
     </outputcacheprofiles> 
    </outputcachesettings> 
</caching> 
+8

estaría bien para dar la [autor] (http://visitmix.com/writings/using-varybycustom-with-outputcache-in-asp-net -mvc-to-support-caching-for-logged-in-users) credit;) – balexandre

+0

http://visitmix.com/writings/using-varybycustom-with-outputcache-in-asp-net-mvc-to-support -caching-for-logged-in-users – ulty4life

0

Debe usar OutputCache.VaryByCustom Property para especificar una cadena personalizada. Y utilizarla, debe reemplazar el método en su Global.asax

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

El atributo Autorizar tiene algunas cosas interesantes pasando con respecto al almacenamiento en caché para usuarios autorizados vs usuarios no autorizados. Es posible que pueda extraer su lógica y modificarla en caché por usuario autorizado, en lugar de solo por "el usuario está autorizado".

Control hacia fuera este mensaje:

Can someone explain this block of ASP.NET MVC code to me, please?

Cuestiones relacionadas