代码之家  ›  专栏  ›  技术社区  ›  Michel

ControllerContext.HttpContext.Session和HttpContext.Current.Session之间的区别是什么

  •  2
  • Michel  · 技术社区  · 14 年前

    我在用一个我可以伪造会话的例子。 它用于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 ,这是空的(或者实际上 HttpContext.Current 为空)。

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Ladislav Mrnka    14 年前

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

    顺便问一下,您在哪里访问控制器外部的会话?你怎么知道会有当前的HttpContext?