1
private void PreventPageFromBeingCached(AuthorizationContext filterContext)
{
    var cachePolicy = filterContext.HttpContext.Response.Cache;
    cachePolicy.SetProxyMaxAge(new TimeSpan(0));
}

我问的原因是我最初在 custom 中有以下代码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.

问题是,通过切换到接口,我失去AuthorizeAttributeOnCacheAuthorization. 根据文档,OnCacheAuthorization“在缓存模块请求授权时调用”。这并没有真正告诉我我需要做什么来实现这个方法,或者我什至首先需要回调。

问题

  1. 实际上会PreventPageFromBeingCached阻止仅使用两行代码缓存页面,还是我还需要包含cachePolicy.AddValidationCallback(CacheValidateHandler, null);方法CacheValidateHandler()(加上 的实现OnCacheAuthorization())?
  2. 如果我确实需要额外的代码,它到底是做什么的?
  3. 如果我都错了,如何防止页面被缓存?
4

1 回答 1

2

就个人而言,我喜欢这里指定的控制器方法

当您使用客户端缓存时,您不会遇到您担心的问题。

于 2012-01-01T22:25:34.030 回答