Выходной кэш на пользователя

c# asp.net-mvc-3

6976 просмотра

2 ответа

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

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

Автор: CR41G14 Источник Размещён: 13.11.2019 11:33

Ответы (2)


27 плюса

Решение

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

Автор: haim770 Размещён: 19.06.2013 10:36

3 плюса

Немного измените свой код и добавьте в форму скрытое поле с хешем userId, когда вы выполняете POSTing.

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

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

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

Автор: Tamim Al Manaseer Размещён: 19.06.2013 10:33
Вопросы из категории :
32x32