У меня есть сложный веб-сайт, который использует кэширование вывода .NET, включенное через Sitefinity. Недавно нам нужно было, чтобы определенный пользовательский элемент управления имел разные кешированные версии в зависимости от местоположения пользователя. Поэтому я дал пользователю управление директивой OutputCache с набором VaryByCustom и переопределил метод GetVaryByCustomString в Global.asax, чтобы получить местоположение пользователя. Проблема в том, что даже в простом тестовом примере это не работает. Мы протестировали этот вариант использования вне контекста Sitefinity, чтобы проверить, не является ли он причиной проблемы, создав новый проект, содержащий страницу .aspx и поместив в него новый пользовательский элемент управления .ascx. На странице есть метка, которая получает текущее время загрузки, а также элемент управления. Элемент управления также имеет метку, отображающую текущее время. Если я дам странице OutputCache установить это:
<%@ OutputCache Duration="60" VaryByParam="none" %>
и элемент управления установлен на это:
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>
ожидаемая функциональность не происходит. Мысль заключалась в том, что если мы откроем эту страницу в двух разных браузерах, мы увидим два разных времени во второй метке. Я что-то здесь совсем пропустил? Я новичок в кэшировании .NET, поэтому это вполне возможно.
Спасибо
Вот мое переопределение GetVaryByCustomString:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "custom")
{
// return custom logic
}
else
{
return base.GetVaryByCustomString(context, custom);
}
}