这种方法是否按照它所说的做(阻止页面被缓存)?

时间:2012-01-01 21:54:56

标签: c# asp.net-mvc asp.net-mvc-3 action-filter authorize-attribute

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()的实现1}})?
  2. 如果我确实需要额外的代码,它到底做了什么?
  3. 如果我错了,我该如何阻止页面被缓存?

1 个答案:

答案 0 :(得分:2)

就个人而言,我喜欢控制器方法,因为我已指定here

当您使用客户端缓存时,您没有关注我在应用中使用此功能所能解决的最佳问题。