2013-06-13 4 views
18

У меня есть панель управления для конкретного пользователя. Панель инструментов будет меняться только ежедневно, я хочу использовать MVC'sOutputCache. Есть ли способ настроить кеширование для каждого пользователя и истечь, когда запрос является новым днем?Настройка кэша вывода для каждого пользователя mvc

Я исследовал это и нашел, что вы можете расширить атрибут OutputCache, чтобы динамически установить продолжительность, но как я могу настроить это для каждого пользователя?

Заранее спасибо

ответ

28

В вашей Web.config:

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

В вашей Controller/Action:

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

Затем в 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); 
} 

В сущности, GetVaryByCustomString позволяет писать специальный метод, чтобы определить, будет ли быть Cache hit/miss.

+0

делает этот же принцип работы с DevTrends DonutCaching? – ganders

+0

Не пробовал, но так как они также предоставляют механизм 'VaryByCustom'. Я предполагаю, что ответ «да». – haim770

2

Попробуйте это в web.config,

<system.web> 
........... 
........... 
<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="UserCache" duration="1440" varyByParam="UserID" enabled="true" location="Client"/> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 
Смежные вопросы