为什么ASP.NET中有两种不兼容的会话状态类型?
我在ASP.NET MVC中看到了两种处理会话数据的方法:为什么ASP.NET中有两种不兼容的会话状态类型?,.net,asp.net,asp.net-mvc-3,session-state,.net,Asp.net,Asp.net Mvc 3,Session State,我在ASP.NET MVC中看到了两种处理会话数据的方法: System.Web.SessionState.HttpSessionState,可在HttpApplication System.Web.HttpSessionStateBase,可在Controller 其中一个存储的数据似乎在另一个中可用 不幸的是,这两种类型的唯一共同祖先是System.Object,这意味着我无法为这两种类型的抽象创建可重用的实用程序代码 为什么API是这样的?在ASP.NET MVC抽象中,引入了经典的H
,可在System.Web.SessionState.HttpSessionState
HttpApplication
,可在System.Web.HttpSessionStateBase
Controller
System.Object
,这意味着我无法为这两种类型的抽象创建可重用的实用程序代码
为什么API是这样的?在ASP.NET MVC抽象中,引入了经典的HttpContext对象请求、响应和会话。它们表示抽象类,并在MVC框架中公开,以隐藏底层上下文并简化单元测试,因为抽象类可以模拟 例如,您拥有的会话对象及其实现 下面是一个如何在经典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进行裸会话。我刚刚发现了与Request
和RequestBase
相同的模式。基本API有两个并行版本吗?回答得很好,达林!非常感谢。您还可以创建新的HttpRequestWrapper(HttpContext.Current.Request)
和新的HttpResponseWrapper(HttpContext.Current.Response)
。