Кэширование ASP.NET MVC зависит от аутентификации
Я использую ASP.NET Preview 5 (скоро обновится до Beta) с LINQ2SQL на моем недавно запущен крошечный webapp.
Я так гордился своей работой, пока Silverlight.net не показала ее на первой странице, и она начала получать более чем скромное количество посетителей.
По какой-то причине пользователи иногда получают "Указанный литой недопустимый", созданный LINQ2SQL - это происходит потому, что пользователи, не прошедшие проверку подлинности, обрабатываются как пользователь "Гость" , а Контроллер загружает информацию о пользователе "Гость" для каждого попадания.
На первой странице есть "Welcome [USERNAME]" сверху, который можно легко кэшировать, используя Donut Caching.
Однако в середине есть блок "Что такое Dudlers.com", который должен отображаться только для пользователей, не прошедших проверку подлинности, и еще один блок "О вас", который должен отображаться только для пользователей, прошедших проверку подлинности. Эти блоки слишком сложны для кэширования с использованием Donut Caching; они слишком разные, это будет очень грязно.
Я хотел бы кэшировать первый, в зависимости от состояния аутентификации пользователя. Поэтому неавторизованные пользователи (разумеется, большинство) получают страницу "Гость" , а другим пользователям, прошедшим проверку подлинности, отображается новая не кэшированная страница.
Можно ли указывать кеширование, различающееся по аутентификации? что-то вроде:
[OutputCache (VaryBy = Аутентификация)]
Или существует другое решение nonASP.NET MVC? (возможно, настройка MS SQL)
Надеюсь, мой вопрос ясен.
Я использую Windows 2003 и MS SQL 2005 Express на том же выделенном сервере.
Спасибо!
Ответы
Ответ 1
Вам не нужно использовать механизм кэширования пончиков. ASP.NET имеет параметр VaryByCustom
, который позволяет вам определить, как изменить кеширование.
Проверьте это для получения дополнительной информации: http://aspadvice.com/blogs/ssmith/archive/2007/10/29/VaryByCustom-Caching-By-User.aspx
Должен отлично работать для ASP.NET MVC.