Этот метод делает то, что он говорит, что он будет делать (предотвращать кэширование страницы)? - PullRequest
1 голос
/ 02 января 2012
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 вызывается, когда модуль кэширования запрашивает авторизацию.Это на самом деле не говорит мне, что мне нужно сделать, чтобы реализовать этот метод, или если мне вообще нужен обратный вызов в первую очередь.

Вопросы

  1. Будет ли PreventPageFromBeingCached на самом деле предотвращать кэширование страницы всего двумя строками кода, или мне нужно также включить cachePolicy.AddValidationCallback(CacheValidateHandler, null); и метод CacheValidateHandler() (плюс реализацию OnCacheAuthorization())?
  2. Если мне нужен дополнительный код, что именно он делает?
  3. Если у меня все неправильно, как я могу предотвратить кэширование страницы?

1 Ответ

2 голосов
/ 02 января 2012

Лично мне нравится подход к контроллеру, так как я указал здесь

У вас нет проблем, о которых вы беспокоитесь, лучшее, что я смог сказать с помощьюэто в моих приложениях, так как вы используете кэширование клиента.

...