我正在使用一个例子,我可以伪造会话。 它适用于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
为空)。
所以我想知道,两者有什么区别?
答案 0 :(得分:2)
ControllerContext.HttpContext是抽象类型HttpContextBase。此类型的默认实现(HttpContextWrapper)包装对HttpContext的访问。因此,当您创建虚假实现时,您将替换它与HttpContext的关系。假实现不会为您创建真正的HttpContext。
顺便说一下。你在哪里访问控制器外的会话?你怎么知道会有任何当前的HttpContext?