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
」在緩存模塊請求授權時調用。這並不能告訴我需要做什麼來實現這個方法,或者如果我甚至需要首先回調。
問題
- 將
PreventPageFromBeingCached
實際上防止只的兩行代碼被緩存的頁面還是需要也包括cachePolicy.AddValidationCallback(CacheValidateHandler, null);
和CacheValidateHandler()
方法(加OnCacheAuthorization()
實現)? - 如果我確實需要額外的代碼,它究竟做了什麼?
- 如果我把它全部弄錯了,我該如何防止頁面被緩存?
謝謝,這有助於簡化*很多*的事情。 – devuxer 2012-01-01 23:03:58