Можете ли вы в коде узнать, какие значения OutputCache VaryByParams были установлены на странице / элементе управления в .NET? - PullRequest
0 голосов
/ 07 июня 2011

С учетом директивы outputcache на странице

<%@ OutputCache Duration="3600" VaryByParam="Id" %>

Как я могу определить значение VaryByParam в коде?

Объект HttpContext.Current.Response.Cache.VaryByParams содержит частный _parameters словарь и внутреннее свойство IsVaryByStar, но без отражения в объекте, который мне очень не хочется делать, я не могу получить к ним доступ. Есть ли какой-нибудь стандартный способ узнать, какие директивы outputcache были установлены для конкретного запроса?

1 Ответ

1 голос
/ 07 июня 2011

Я не верю, что был бы другой способ перечисления параметров.Помимо перечисления параметров вам, возможно, придется искать параметр подстановочного знака ("*").Поэтому я считаю, что самым простым способом было бы использовать отражение.

С другой стороны, я не уверен насчет точного варианта использования, который требует такого требования.Пара альтернативных подходов может или не может соответствовать вашим требованиям:

  1. Создайте свой собственный элемент управления / расширитель для принятия параметров кэширования (вместо директивы OutputCache), а затем измените Response.Cache в раннем жизненном цикле страницы.
  2. Используйте атаку грубой силой, создав словарь всех возможных параметров (но поддержка подстановочных знаков может испортить это, потому что в таком случае Response.Cache.Item вернет true для всех параметров).Возможная альтернатива состоит в том, чтобы заставить страницу указывать свои параметры кэша, введя абстрактный метод из базового класса страницы.
...