Атрибут ASP.Net MVC 3.0 [OutputCache] - это глобально или по сеансам? - PullRequest
7 голосов
/ 16 марта 2011

При создании приложения ASP.Net MVC 3.0 я могу включить атрибут OutputCache в действие и определить продолжительность сохранения кэша.По истечении этого срока любое действие, вызывающее запуск действия, приведет к тому, что этот кэшированный результат будет отброшен и обновлен.

Мой вопрос ... Является ли этот кэшированный вывод глобальным для всех пользовательских сеансов или этот параметр кэша является специфическим длякаждая сессия.Другими словами, если user1 делает запрос, когда действие с атрибутом OutputCache установлено в 1 час, его запрос начинается, например, в полдень (12:00 PM).Пользователь2 делает запрос на то же действие, но в полдень (12:30 вечера).Будет ли кэшированный результат одинаковым для обоих пользователей, и если да, будет ли обновлен кэшированный вывод для user2 в 13:00?

Ответы [ 3 ]

6 голосов
/ 16 марта 2011

Зависит. Если ваш URL содержит какие-либо специфичные для пользователя части (например, ~/blogs/userid/1), тогда да, в противном случае он не зависит от сессии. Вы можете точно настроить его в зависимости от параметра, ...

Кэширование в ASP NET MVC не отличается от веб-форм, это просто та же инфраструктура, которая основана на URL .

5 голосов
/ 16 марта 2011

Вы можете использовать varbyparam, как сказал Алиостад, тогда продолжительность будет зависеть от сессии, в противном случае это не так.

[OutputCache(Duration=10, VaryByParam="none")]

http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs

0 голосов
/ 10 октября 2013

Вы можете легко сделать его Session зависимым, используя VaryByCustom и возвращая SessionId (очень недорогая операция).

...