Кэширование 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.