Можно ли кешировать по роли членства в asp.net mvc? - PullRequest
2 голосов
/ 11 июля 2010

У нас есть несколько страниц с очень высоким трафиком, поэтому в файле web.config есть следующее:

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="defaultCache" duration="900" varyByParam="*" location="Any"/>
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

и следующий атрибут необходимых методов контроллера:

[OutputCache(CacheProfile = "defaultCache")]

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

Итак, есть ли способ кэширования по ролям?Возможно ли это даже в том случае, если URL-адрес страницы остается прежним, но содержимое изменяется в соответствии с зарегистрированной ролью?Было бы лучше изменить URL, добавив что-то вроде? Admin = true для всех релевантных страниц, чтобы атрибут varyByParam="*" в нашем профиле кэша мог выполнять свою работу?

Спасибо.

1 Ответ

3 голосов
/ 11 июля 2010
<add name="defaultCache" duration="900" varyByParam="*" varyByCustom="membership" location="Any"/>

Global.asax:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "membership")
    {
        string membership = "";//Get membership.
        return membership;
    }

    return string.Empty;
}
...