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. PreventPageFromBeingCached實際上防止只的兩行代碼被緩存的頁面還是需要也包括cachePolicy.AddValidationCallback(CacheValidateHandler, null);CacheValidateHandler()方法(加OnCacheAuthorization()實現)?
  2. 如果我確實需要額外的代碼,它究竟做了什麼?
  3. 如果我把它全部弄錯了,我該如何防止頁面被緩存?

回答

2

就個人而言,我很喜歡,因爲我已經指定here

你沒有問題,你所關心的最好的,我已經能夠告訴過我的應用程序作爲使用這種控制器的方法您正在使用客戶端緩存。

+0

謝謝,這有助於簡化*很多*的事情。 – devuxer 2012-01-01 23:03:58

相關問題