Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ASP.NET中有两种不兼容的会话状态类型?_.net_Asp.net_Asp.net Mvc 3_Session State - Fatal编程技术网

为什么ASP.NET中有两种不兼容的会话状态类型?

为什么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

我在ASP.NET MVC中看到了两种处理会话数据的方法:

  • 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)