Запретить кэширование страницы при использовании OutputCacheAttribute - PullRequest
0 голосов
/ 10 ноября 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 10 ноября 2010

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

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

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

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

В MVC вы сможете выполнить приведенный выше код в вашем контроллере

0 голосов
/ 10 ноября 2010

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

context.Request.IsAuthenticated

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

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

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

...