[英]Session gets lost when enabling OutputCache
我有一個(工作)MVC 應用程序,它在多個部分使用會話屬性:
return httpContext.Session[SPContextKey] as SharePointAcsContext;
(忽略這是共享點;此問題不是特定於 SP 的)
這工作正常,直到我嘗試啟用輸出緩存:
[OutputCache (Duration =600)]
public ActionResult Select() {
DoSelect();
}
當內容被緩存時,httpContext.Session 變為 NULL。
有沒有辦法保留會話數據並使用緩存?
我自己找到了解決方案。 我花了一段時間才得出結論 - 如果數據被緩存 -根本不應該運行任何單獨的代碼。 因為這應該是緩存的主要目的:當數據被兌現時不要運行任何代碼。
這讓我得出結論,導致問題的代碼必須在緩存之前運行。 所以“壞男孩”很容易找到。 當緩存應用但無法訪問會話時,代碼中 OutputCache-Attribute之前的另一個屬性(在本例中為 AuthorizeAttribute)仍在運行:
[Route("{id}")]
[UserAuth(Roles =Directory.GroupUser)]
[JsonException]
[OutputCache(Duration = 600)]
public ActionResult Select()
{
DoSelect();
}
將 UserAuth-Attribute 置於 OutputCache-Attribute 之下解決了問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.