2010-11-09 2 views
0

Есть ли способ предотвратить кэширование страницы на основе некоторой логики?Запретить кэширование страницы при использовании OutputCacheAttribute

Я хочу, чтобы кешировать анонимный доступ к странице, поэтому я могу установить VaryByCustom="user" и получить магию в методе Global12as02ax. ОК. Но я действительно не хочу кэшировать страницу, если пользователь аутентифицирован, только если он не аутентифицирован. Есть ли способ указать такие вещи?

Причина, по которой я хочу, чтобы данные не добавлялись в кеш для начала (вместо добавления с помощью случайного ключа), заключается в том, что по мере того, как кеш растет, все выкидывается, и я не хочу, чтобы не аутентифицированная версия быть выброшенным.

ответ

0

Вы можете осуществить это программно при загрузке страницы в веб-формах asp.net.

bool isAuthenticated = /*variable assignment*/; 
if (isAuthenticated){ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
} 

Если вы хотите, чтобы эта логика была в отдельном методе где-то, вы можете зарегистрировать обратный вызов так.

Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(MethodWhichSetsCacheability), null); 

В MVC, вы должны быть в состоянии выполнить приведенный выше код в контроллере

0

Вы можете проверить, аутентифицирован ли пользователь в GetVaryByCustomString.

context.Request.IsAuthenticated 

Если true, верните нуль. Если не вернуть фиксированную строку.

Базовая реализация GetVaryByCustomString возвращает значение null, поэтому это должно быть безопасным. Но поскольку значение null не может использоваться в качестве ключа в кеше, я думаю, что эта страница не будет кэшироваться.

Однако я не проверял это!

+0

Да, но проблема с этим состоит в том, что чем больше ключей кэшей добавляются, вещи получают вытеснена из кэша. Я определенно не хочу, чтобы не аутентифицированная версия выходила из кеша! – hackerhasid

+0

Ah ok ... в этом случае ... глядя на документы, базовая реализация GetVaryByCustomString возвращает null. Мне интересно, если вы это сделаете - страница не кэшируется ..... нуждается в тестировании. Это кажется вероятным, поскольку кеш не может использовать null в качестве ключа. –

Смежные вопросы