2013-06-13 13 views
18

Ich habe ein benutzerdefiniertes Dashboard. Das Dashboard ändert sich nur täglich, ich möchte MVC'sOutputCache verwenden. Gibt es eine Möglichkeit, das Zwischenspeichern pro Benutzer zu konfigurieren und abzulaufen, wenn die Anforderung ein neuer Tag ist?Konfigurieren des Ausgabe-Cache pro Benutzer mvc

Ich habe dies untersucht und festgestellt, dass Sie das Attribut OutputCache erweitern können, um Ihre Dauer dynamisch festzulegen, aber wie kann ich dies pro Benutzer konfigurieren?

Vielen Dank im Voraus

Antwort

28

In Ihrem Web.config:

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

In Ihrem Controller/Action:

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

Dann in Ihrem 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); 
} 

Im Wesentlichen GetVaryByCustomString können Sie eine benutzerdefinierte Methode schreiben hit/miss ein Cache, um zu bestimmen, ob es sein.

+0

funktioniert das gleiche Konzept mit DevTrends DonutCaching? – ganders

+0

Habe es nicht versucht, aber da sie auch einen "VaryByCustom" -Mechanismus bieten. Ich nehme an, die Antwort ist ja. – haim770

2

diese web.config in Versuchen,

<system.web> 
........... 
........... 
<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="UserCache" duration="1440" varyByParam="UserID" enabled="true" location="Client"/> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 
Verwandte Themen