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
.
问题是,通过切换到接口,我失去AuthorizeAttribute
了OnCacheAuthorization
. 根据文档,OnCacheAuthorization
“在缓存模块请求授权时调用”。这并没有真正告诉我我需要做什么来实现这个方法,或者我什至首先需要回调。
问题
- 实际上会
PreventPageFromBeingCached
阻止仅使用两行代码缓存页面,还是我还需要包含cachePolicy.AddValidationCallback(CacheValidateHandler, null);
方法CacheValidateHandler()
(加上 的实现OnCacheAuthorization()
)? - 如果我确实需要额外的代码,它到底是做什么的?
- 如果我都错了,如何防止页面被缓存?