Outputcache не работает с маршрутизацией - PullRequest
1 голос
/ 04 февраля 2010

Я использую маршрутизацию из System.Web.Routing без MVC в стандартном приложении проекта веб-приложения ASP.Net. В основном это делается для получения более точных URL на разрабатываемом портале (вместо ~ / default.aspx? Contentid = 123 у нас есть ~ / {contentsubject}. Портал не авторизован, и вся информация находится в URL, поэтому в кэшировании Сценарий мы можем кэшировать полные страницы.

Когда я попытался включить кэширование вывода, я заметил, что кэширование не было выполнено. Кажется, что директива страницы outputcache полностью игнорируется. Это правда или я что-то упустил? Можно ли это исправить?

Я сделал небольшое тестовое приложение (я загрузил его на http://www.4shared.com/file/196605919/31903b07/OutputCacheTest.html), который просто содержит страницу Webform1.aspx, которая использует главную страницу и пользовательский элемент управления. Все три выводят текущую дату и время.

Когда я запрашиваю http // localhost / OutputcacheTest / Webform1.aspx, 10-секундное кэширование работает должным образом, то есть показанное время обновляется только каждые 10 секунд.

Приложение также определяет подстановочный маршрут, который перехватывает все запросы и возвращает тот же Webform1.aspx, что и обработчик. Поэтому при запросе http // localhost / OutputcacheTest / myroute выполняется та же страница, но теперь кэширование не работает, т. Е. Текущее время отображается для каждого запроса.

Примечание: при использовании встроенного веб-сервера разработки оба сценария работают, похоже, что только IIS имеет эту проблему.

У кого-нибудь есть решение или обходной путь для включения кэширования вывода в этом сценарии?

Ответы [ 2 ]

1 голос
/ 04 февраля 2010

Я получил это, выполнив регистрацию модуля и обработчика точно так же, как в этой статье

Раньше у меня были последние регистрации в блоке, и теперь я перенес их наверх. Я также добавил атрибут runAllManagedModulesForAllRequests = "true" в этот блок
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">

Итак, директива страницы outputcache работает!

1 голос
/ 04 февраля 2010

Теперь вам нужен атрибут [OutputCache] для действий вашего контроллера.

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

...