2013-06-19 3 views
9

Привет, у меня довольно обширная память, которая отличается от пользователя. Как кэшировать ответ на основе текущего входного идентификатора пользователя, который не передается в качестве параметра, но должен быть получен от текущего зарегистрированного пользователя. Это мое понимание VaryByParam смотрит на контекст запросаКэш вывода на пользователя

Также есть значение в базе данных, при этом изменяется кэш должен быть сброшен

ответ

26

В вашем 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 : Controller { ...} 

Тогда в вашем 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 позволит вам написать собственный метод, чтобы определить, будет ли Кэширование hit/miss, возвращая строку, которая будет использоваться в качестве какого-то «хэш» на кэш-копии.

2

Изменить код немного и добавить скрытое поле в форме который имеет hash userId, когда вы используете POSTING.

Или лучше использовать метод VaryByCustom и варьироваться в зависимости от значения cookie пользователя.

Вот хорошая ссылка:

http://codebetter.com/darrellnorton/2004/05/04/asp-net-varybycustom-page-output-caching/

Смежные вопросы