ControllerContext.HttpContext.Session和HttpContext.Current.Session有什么区别

时间:2010-11-23 14:36:57

标签: asp.net asp.net-mvc-2 session-state

我正在使用一个例子,我可以伪造会话。 它适用于mvc控制器的单元测试。

在测试中我创建了一个控制器然后我这样做:

FakeHttpContext  httpctx  = new FakeHttpContext(null,null,null,null,mSessionItems );
ControllerContext ctx2 = new ControllerContext(httpctx,new RouteData(), target);

其中mSessionItems是我的会话,target是我的控制器实例

事实上,当我在控制器中阅读this.ControllerContext.HttpContext.Session时,我有一个会话,很棒!

但....我还读取了控制器外的会话,并且我使用HttpContext.Current.Session,这是null(或者实际上,HttpContext.Current为空)。

所以我想知道,两者有什么区别?

1 个答案:

答案 0 :(得分:2)

ControllerContext.HttpContext是抽象类型HttpContextBase。此类型的默认实现(HttpContextWrapper)包装对HttpContext的访问。因此,当您创建虚假实现时,您将替换它与HttpContext的关系。假实现不会为您创建真正的HttpContext。

顺便说一下。你在哪里访问控制器外的会话?你怎么知道会有任何当前的HttpContext?