为什么ASP.NET中有两个不兼容的会话状态types?

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

  • System.Web.SessionState.HttpSessionState ,可在HttpApplication
  • System.Web.HttpSessionStateBase ,在Controller可用

存储在一个中的数据似乎在另一个中可用。

不幸的是,这两种types的唯一共同的祖先是System.Object ,这意味着我不能为抽象的任何一个创build可重用的实用程序代码。

为什么这样的API? 我错过了两者之间有一个重要的区别?

One Solution collect form web for “为什么ASP.NET中有两个不兼容的会话状态types?”

在ASP.NET MVC抽象了经典的HttpContext对象Request,Response,Session的介绍。 它们代表了抽象类,并暴露在MVC框架中,隐藏了底层的上下文,简化了unit testing,因为抽象类可以被嘲弄。

例如对于会话对象,你有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,其中包含裸会话。

  • 由X-Frame-Options拒绝载入:http://www.youtube.com/v/g5RM5StrMXY不允许跨越原始帧
  • ASP.NET MVC - 根据Active Directoryvalidation用户,但要求input用户名和密码
  • 使用JSON.NET作为ASP.NET MVC 3中的默认JSON序列化程序 - 有可能吗?
  • 使用Twitter Bootstrap在@ html.actionlink中显示html
  • ASP.NET MVC:通过DataAnnotation进行自定义validation
  • ASP.NET MVC:是否为每个请求创build了Controller?
  • 如何在cshtml模板中创build一个函数?
  • 没有@ Html.Button!
  • url内的双转义序列:请求过滤模块configuration为拒绝包含双转义序列的请求
  • 使用Razor MVC3的条件HTML属性
  • MVCdate时间validation - 英国date格式