ASP.NET MVC HttpContext.Session对象

时间:2010-11-18 08:53:48

标签: asp.net-mvc httpcontext

我有一个问题。我在我的项目中构建了自定义类,其中包含公共静态属性ctx和assingn HttpContext.Current对象。在运行时,该属性似乎引用了HttpContext对象,但ctx.Session类为null。当我调试我的应用程序时,表达式(ctx)的左侧与右侧(HttpContext.Current)不完全相同。为什么会这样?

素不相识

2 个答案:

答案 0 :(得分:1)

HttpContext.Current只是该请求的单例。通过将HttpContext.Current分配给静态变量,您将共享此HttpContext.Current到整个范围,这可能不正确。

Session是每用户对象,而static是应用程序范围的对象。明智地使用静态。

答案 1 :(得分:-1)

我会做的就是这样。

1-提供当前httpcontext的静态类(例如:ContextFactory)。如果它有HttpContext.Current,则提供该值,如果没有则提供指定的上下文。在您的情况下,new Mock<HttpContextBase>();

public static class ContextFactory
{
    private static HttpContextBase current = null;

    public static HttpContextBase Current
    {
        get { return current ?? HttpContext.Current; }
        set { current = value; }
    }
}

2-然后我将代码UserSess改为

public static class UserSess 
{
    public static UserID
    {
        get { return ContextFactory.Current.Session["UserID"]; }
        set { ContextFactory.Current.Session["UserID"] = value; } 
    }
   //... 
}

真诚