2013-06-19 19 views
9

Witam mam dość intensywny pulpit pamięci, który jest inny dla każdego użytkownika. Jak buforować odpowiedź na podstawie bieżącego zalogowanego ID użytkownika, który nie jest przekazywany jako parametr, ale musi pochodzić od bieżącego zalogowanego użytkownika. To jest moje zrozumienie VaryByParam wygląda w kontekście żądańWyjściowa pamięć podręczna dla użytkownika

Ponadto istnieje wartość w bazie danych, gdy ten zostanie zmieniony cache musi zostać zresetowany

Odpowiedz

26

W swojej Web.config:

<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="Dashboard" duration="86400" varyByParam="*" varyByCustom="User" location="Server" /> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

w twojej Controller/Action:

[OutputCache(CacheProfile="Dashboard")] 
public class DashboardController : Controller { ...} 

Następnie w Global.asax:

//string arg filled with the value of "varyByCustom" in your web.config 
    public override string GetVaryByCustomString(HttpContext context, string arg) 
    { 
     if (arg == "User") 
     { 
      // depends on your authentication mechanism 
      return "User=" + context.User.Identity.Name; 
      //?return "User=" + context.Session.SessionID; 
     } 

     return base.GetVaryByCustomString(context, arg); 
    } 

W istocie, GetVaryByCustomString pozwoli Ci napisać niestandardową metodę w celu ustalenia, czy nie będzie cache hit/miss powracając ciąg znaków, który będzie używany jako pewnego rodzaju z „hash” za egzemplarz Cache.

Powiązane problemy