Dot-Net

為什麼 ASP.NET 中有兩種不兼容的會話狀態類型?

  • March 27, 2011

我在 ASP.NET MVC 中看到了兩種處理會話數據的方法:

  • System.Web.SessionState.HttpSessionState, 可在HttpApplication
  • System.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,您可以在其中進行裸會話。

引用自:https://stackoverflow.com/questions/5447611