Как использовать страницу OutputCache и VaryByCustom для учета нескольких критериев в ASP.NET 2.0+? - PullRequest
0 голосов
/ 24 мая 2011

У нас есть многоязычный сайт, имеющий некоторую персонализацию после входа в систему пользователя (например, заголовки показывают разные ссылки, имя пользователя пользователя и т. Д.), Но мы хотели бы кэшировать определенные общедоступные страницы, которые являются версиями страница перед входом пользователя (например, для людей, которые просто просматривают сайт).

Есть ли способ принять во внимание следующие несколько критериев при использовании VaryByCustom на сайте ASP.NET 2.0 (да, мы в конечном итоге будем обновлять, но не сейчас) и как бы вы подключили страницу, чтобы передать несколько критериев в метод?

  1. Настраиваемый профиль участника ASP.NET свойство называется Profile.Preferences.Language (мы проверит схему URL и установит свойство Language к действительному значение до VaryByCustom).
  2. Браузер пользователя
  3. Любые строки запросов / параметры

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

Любая помощь будет принята с благодарностью.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

Я бы предложил переопределить метод GetVaryByCustomString в Global.asax, чтобы создать собственный кеш-ключ на основе трех указанных выше критериев.

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    const string KEY = "UserSpecific";
    if (arg == KEY) {
         //perform some logic to generate a unique key per querystring, brower and profile
         string cacheKey = context.Request.QueryString["someparam"] + ...
         return cacheKey;
     }

    return base.GetVaryByCustomString(context, arg);
}

И изменить директиву outputcache для использования этой новой логики генерации кеш-ключей.

<%@ OutputCache Duration="300" VaryByParam="none" VaryByCustom="UserSpecific" %>
0 голосов
/ 25 мая 2011

Для чисел 2 и 3 вы можете использовать следующие

<%@ OutputCache Duration="Whatever you want in seconds" VaryByParam="*" VaryByCustom="browser"%>

Извините, я не могу помочь вам в первом

...