Dot-Net
為什麼 ASP.NET 中有兩種不兼容的會話狀態類型?
我在 ASP.NET MVC 中看到了兩種處理會話數據的方法:
System.Web.SessionState.HttpSessionState, 可在HttpApplicationSystem.Web.HttpSessionStateBase, 可在Controller儲存在一個中的數據似乎在另一個中可用。
不幸的是,這兩種類型的唯一共同祖先是
System.Object,這意味著我無法為任何一種抽象創建可重用的實用程式碼。為什麼API是這樣的?我缺少的兩者之間有重要區別嗎?
在 ASP.NET MVC 中,對經典的 HttpContext 對象 Request、Response、Session 進行了抽象。它們代表抽像類並在整個 MVC 框架中公開,以隱藏底層上下文並簡化單元測試,因為抽像類可以被模擬。
例如,對於您擁有的會話對象
HttpSessionStateBase及其實現HttpSessionStateWrapper。下面是一個如何在經典 ASP.NET 會話和抽象之間進行轉換的範例:
HttpSessionStateBase session = new HttpSessionStateWrapper(HttpContext.Current.Session);因此
System.Web.SessionState.HttpSessionState,您所指的是自經典 ASP.NET 1.0 以來就存在的底層會話對象。在 MVC 中,這個對像被包裝在一個HttpSessionStateWrapper. 但是由於 ASP.NET MVC 是一個 ASP.NET 應用程序,您仍然可以獲得 Global.asax,您可以在其中進行裸會話。