1
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. PreventPageFromBeingCached2行のコードだけで実際にページがキャッシュされないようにしますか、それとも と メソッド (および の実装) も含める必要がありcachePolicy.AddValidationCallback(CacheValidateHandler, null);ますCacheValidateHandler()OnCacheAuthorization()?
  2. 追加のコードが必要な場合、正確には何をしますか?
  3. すべてが間違っている場合、ページがキャッシュされないようにするにはどうすればよいですか?
4

1 に答える 1

2

個人的には、ここで指定したコントローラーアプローチが好きです

クライアントキャッシングを使用しているので、アプリでこれを使用することで私が知ることができた最高のことについて心配している問題はありません。

于 2012-01-01T22:25:34.030 に答える