2010-11-09 54 views
0

有沒有辦法阻止基於某種邏輯的頁面被緩存?使用OutputCacheAttribute時阻止頁面被緩存

我想緩存匿名訪問頁面,所以我可以設置VaryByCustom="user"並在Global.asax的GetVaryByCustomString方法中有一些魔力。好。但是我實際上並不想緩存頁面,如果用戶的身份驗證,只有當它沒有通過身份驗證。有沒有辦法指定這種東西?

我希望數據不被添加到緩存中(而不是添加一些隨機密鑰)的原因是,隨着緩存的增長,事情會被拋出,而我不希望未經身份驗證的版本被拋出。

回答

0

你可以在你的頁面加載的asp.net web表單中以編程方式執行此操作。

bool isAuthenticated = /*variable assignment*/; 
if (isAuthenticated){ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
} 

如果你想在某個地方使用單獨的方法,你可以像這樣註冊一個回調。

Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(MethodWhichSetsCacheability), null); 

在MVC中,你應該能夠在你的控制器

0

您可以檢查用戶是否在GetVaryByCustomString中進行身份驗證。

context.Request.IsAuthenticated 

如果true返回null。如果不返回固定的字符串。

GetVaryByCustomString的基本實現返回null,所以這應該是安全的。但由於null不能用作緩存中的鍵,所以我認爲這個頁面不會被緩存。

但是我沒有測試過!

+0

是執行上面的代碼,但這個問題是,隨着越來越多的緩存鍵得到補充,事情就推出了高速緩存。我絕對不希望未經認證的版本被推出緩存! – hackerhasid 2010-11-09 22:00:39

+0

啊,好吧......在這種情況下......查看文檔GetVaryByCustomString的基本實現返回null。我想知道如果你這樣做 - 頁面沒有被緩存.....需要測試。這看起來可能是因爲緩存不能將null用作關鍵字。 – 2010-11-09 22:03:53