我緩存使用緩存配置文件的一些頁面的服務器上的不同版本,對於不同的版本我使用VaryByCustom參數witch被重載並返回一個版本註冊用戶和另一個共同一。事實證明,我的註冊用戶很快就會在頁面上看到非常不同的信息。我的問題是有可能說如果用戶是註冊用戶而不是緩存任何東西?高速緩存只爲定期不爲註冊用戶ASP.NET MVC
回答
你可以試試這個:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if ("User".Equals(custom, StringComparison.OrdinalIgnoreCase))
{
if (!string.IsNullOrWhiteSpace(Thread.CurrentPrincipal.Identity.Name))
return Guid.NewGuid().ToString(); // do not cache anything
return string.Empty; // cache for non-signed-in users
}
return base.GetVaryByCustomString(context, custom);
}
回覆評論
GUID是全局唯一標識符。每次你調用Guid.NewGuid().ToString()
,你都會得到一個非常獨特的字符串。 從技術上講,結果仍然會被緩存,但是它將使用唯一字符串進行緩存。所以,2個登錄用戶看到相同的緩存結果的機會非常低。事實上,相同的登錄用戶會看到該頁面的緩存結果的機會相同。
如果您不想緩存任何內容,另一種方法是手動實現緩存。但是,我不認爲您可以通過使用OutputCacheAttribute
來告訴操作方法「緩存非登錄用戶,但不緩存已登錄用戶」。
謝謝我會試試這個,它不僅僅是明確的對我來說,爲什麼他不會緩存任何東西,當你說:return Guid.NewGuid()。ToString(); – 2012-03-21 09:44:25
謝謝,也許最好的選擇是緩存每個用戶不同版本的方式,至少我不會徒勞地使用內存。再次感謝。 – 2012-03-21 12:28:47
是的,這就是我們所做的 - 從''User''字符串的'GetVaryByCustomString'覆蓋中返回'Thread.CurrentPrincipal.Identity.Name'。這樣,每個用戶都可以獲得他們自己的緩存版本的頁面,並且匿名用戶都共享一個單獨的緩存版本。 – danludwig 2012-03-21 12:39:16
事實證明,你可以停止登錄用戶的緩存,通過實施自定義緩存提供商的巫婆,你可以在添加,設置,刪除方法防止緩存任何東西。您也可以通過global.asax中的用戶非常緩存提供程序。唯一的原因是我從來沒有使用過這種方法,我仍然需要爲用戶緩存一些頁面,並且我沒有找到方法來發現緩存提供程序類中的當前緩存配置文件,以便我可以緩存或不緩存基於個人資料。如果出於某種原因,您只是想防止在每個頁面上對已簽名用戶進行緩存,我認爲這是更好的方法,然後根據使用GUID的自定義方法進行更改。
- 1. ASP.NET MVC 3高速緩存或不高速緩存動作策略
- 2. ASP.net MVC 3用戶註冊
- 3. ASP.NET MVC和ASP.NET成員:用戶註冊
- 4. ASP.NET高速緩存唯一
- 5. Apache反向高速緩存代理 - 爲什麼不高速緩存?
- 6. 帳戶註冊不工作ASP.NET MVC
- 7. 註冊RazorViewEngine只爲
- 8. 只爲我的國家註冊用戶
- 9. 民意調查只爲註冊用戶
- 10. 註冊爲用戶失敗... Asp.net MVC實體框架
- 11. ASP.NET MVC註冊用戶數據庫
- 12. 哪裏存儲MVC 4註冊用戶?
- 13. MVC中的高速緩存位置
- 14. 高速緩存後「採取」行動RDD導致只有2%高速緩存
- 15. 應用局部化行爲和共享高速緩存定位
- 16. ASP.net:註銷時出現高速緩存問題
- 17. 使用spring高速緩存的屬性高速緩存
- 18. ASP.NET MVC 3高速緩存持續時間
- 19. ASP.NET MVC會話vs全局vs高速緩存
- 20. ASP.NET高速緩存的位置
- 21. 爲多個ASP.NET用戶緩存WCF ChannelFactories
- 22. 禁用高速緩存中的緩存
- 23. ASP.NET MVC - web.config中的高速緩存和壓縮設置不總是被使用
- 24. 會話用戶不能註冊使用asp.net mvc的C#
- 25. 爲ASP.NET MVC中的特定區域註冊HttpHandler
- 26. 如何在註冊期間爲用戶創建特定的URL?
- 27. 在asp.net mvc 2.0中實現自定義用戶註冊
- 28. Rails的高速緩存未到期
- 29. 最後使用的高速緩存行與不同的高速緩存行
- 30. ASP.NET MVC 2用戶控件緩存
當你說「註冊」,你的意思是「目前登錄」? – danludwig 2012-03-20 19:27:34
是的,這就是我的意思,即使是某些類型的用戶甚至都不重要(用戶根據他們有或沒有角色的不同而有所不同) – 2012-03-21 09:38:18