private void PreventPageFromBeingCached(AuthorizationContext filterContext)
{
var cachePolicy = filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge(new TimeSpan(0));
}
Причина, по которой я спрашиваю, состоит в том, что у меня изначально был следующий код в пользовательском AuthorizeAttribute
:
private void PreventPageFromBeingCached(AuthorizationContext filterContext)
{
var cachePolicy = filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge(new TimeSpan(0));
cachePolicy.AddValidationCallback(CacheValidateHandler, null);
}
protected void CacheValidateHandler(
HttpContext context, object data, ref HttpValidationStatus validationStatus)
{
//todo validationStatus = OnCacheAuthorization(new HttpContextWrapper(context));
}
Я просто вставил этот код из ответа на StackOverflow некоторое время назад, и яс тех пор переместил эту логику в IAuthorizationFilter
.
. Проблема в том, что при переключении на интерфейс я потерял AuthorizeAttribute
реализацию OnCacheAuthorization
.Согласно документам, OnCacheAuthorization
вызывается, когда модуль кэширования запрашивает авторизацию.Это на самом деле не говорит мне, что мне нужно сделать, чтобы реализовать этот метод, или если мне вообще нужен обратный вызов в первую очередь.
Вопросы
- Будет ли
PreventPageFromBeingCached
на самом деле предотвращать кэширование страницы всего двумя строками кода, или мне нужно также включить cachePolicy.AddValidationCallback(CacheValidateHandler, null);
и метод CacheValidateHandler()
(плюс реализацию OnCacheAuthorization()
)? - Если мне нужен дополнительный код, что именно он делает?
- Если у меня все неправильно, как я могу предотвратить кэширование страницы?