为什么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,其中包含裸会话。

  • 在ASP.NET MVC中授权属性
  • 扩展方法不能dynamic分派
  • MVC3validation - 要求一个来自组
  • IIS上的ASP.NET MVC3和Windows身份validation会一直redirect到/ Account / Login
  • MVC3 Url.Action查询string生成
  • 自定义validation摘要模板Asp.net MVC 3
  • ASP.NET MVC:Razor中的自定义Html Helpers
  • 从视图或部分视图中将CSS或JavaScript文件添加到布局头部
  • 如何使Html.DisplayFor显示换行符?
  • 如何在razor文件中指定CSS @media?
  • 使用Razor / MVC3将AssemblyVersion变成网页的问题