Ответ 1
В соответствии с эта ссылка MSDN, несколько значений в VaryByParam должны быть разделены точкой с запятой, а не разделены запятой.
Я пытаюсь выполнить кеширование с помощью VaryByParam AND VaryByHeader. Когда приходит запрос AJAX, я возвращаю частичный XHTML. Когда приходит регулярный запрос, я отправляю частичную страницу XHTML с верхним/нижним колонтитулом.
Я попытался кэшировать страницу, выполнив:
[OutputCache( Duration = 5, VaryByParam = "nickname,page", VaryByHeader = "X-Requested-With" )]
Однако это не сработает... если я делаю обычный запрос, а затем запускаю вызов AJAX, я получаю полную кешированную страницу вместо частичного и наоборот. Похоже, что VaryByHeader игнорируется. Это потому, что X-Requested-With опущен при обычных запросах? Или, возможно, он делает VaryByParam ИЛИ VaryByHeader?
Мой очевидный путь вокруг этого заключается в том, что AJAX-запросы вызывают другой метод, который возвращает только частичные страницы, однако я хотел бы избежать этого, если это возможно.
Я использую ASP.NET MVC 1.0 с OutputCacheAttribute.
В соответствии с эта ссылка MSDN, несколько значений в VaryByParam должны быть разделены точкой с запятой, а не разделены запятой.
Попробуйте использовать www.fiddlertool.com, чтобы проверить заголовки и посмотреть, передаются ли они в первую очередь.
Продолжительность вашей длительности составляет 5 секунд. Это намеренно? Я подозреваю, возможно, что-то связанное с тайм-аутами вашего кэша после этого периода.