Можно специфицировать несколько параметров, если разделить их точками с запятой:
<%@ DutputCache Duration="20" VaryByParam="ProductID;CurrencyType" %>
В этом случае будут кэшироваться отдельные версии выходной страницы, если строка запроса отличается по ProctuctID или CurrencyType.
На заметку! Кэширование вывода хорошо работает со страницами, которые отличаются данными серверной стороны (например, данными из базы) и данными в строке запроса. Однако кэширование вывода не работает, если выходная страница зависит от специфичной для пользователя информации, такой как данные сеанса или cookie-наборы. Кэширование вывода также не будет работать с управляемыми событиями страницами, которые использую формы. Во избежание этих проблем, следует применять кэширование фрагментов вместо кэшировании целых страниц или же использовать кэширование данных.
Варьирование параметров строки запроса — не единственный выбор для сохранения множества кэшированных версий страницы. ASP.NET также позволяет вам создавать собственную процедуру, которая принимает решение — нужно ли помещать в кэш новую версию страницы или же использовать существующую. Этот код проверяет соответствующую информацию и возвращает строку. ASP.NET применяет эту строку для реализации кэширования. Если ваш код генерирует одно и то же строковое значение для различных запросов, то ASP.NET повторно использует кэшированную страницу. Если ваш код генерирует новое строковое значение, ASP.NET создает новую кэшированнуто версию и сохраняет ее отдельно.
Один из способов применения настраиваемого кэширования — хранить разные версии страницы, основываясь на типе браузера. Таким образом, браузеры Netscape всегда будут получать оптимизированные для Netscape страницы, а Internet Explorer получит HTML, оптимизированный именно для него. Чтобы настроить такую логику, следует начать с добавления директивы OutputCache к страницам, которые будут кэшироваться. Используйте атрибут VaryByCustom, чтобы специфицировать имя, представляющее тип создаваемого настраиваемого кэширования. В следующем примере используется имя браузера, поскольку страницы должны кэшироваться на базе клиентского браузера:
<%@ OutputCache Duration="20" VаryByParam="None" VaryByCustom="browser" %>
Далее потребуется создать процедуру, которая будет генерировать пользовательскую кэш-строку. Эта процедура должна быть закодирована в файле приложения global.аsах (или в файле его скрытого кода) и должна использовать следующий синтаксис:
public override string GetVaryByCustomString(
HttpContext context, string arg)
{
// Проверить запрашиваемый тип кэширования.
if (arg == "browser")
{
// Определить текущий браузер.
предыдущая следующая страница вначало главы оглавление
487