【问题标题】:HttpSessionStateBase vs HttpContext.Current.SessionHttpSessionStateBase 与 HttpContext.Current.Session
【发布时间】:2017-01-25 10:28:47
【问题描述】:

我有一个控制器,它设置一个会话变量如下

    Session["CurrentUser"] = user;

    using (DatabaseEntities db = new DatabaseEntities())
    {
            Helpers.LoadSessionData(user, user.Tenancy.BusinessUnits.FirstOrDefault(), db);
    }

其中 user 是从数据库中设置的对象。然后调用一个方法以将各种其他数据位加载到传递同一用户对象的 Session 中。 LoadSessionData 方法的开头几行如下

    currentUser = db.Users.Include(u => u.BusinessMemberships)
                             .Include(u => u.BusinessMemberships.Select(bm => bm.DivisionMemberships))
                             //.Include(u => u.Tenancy)
                             //.Include(u => u.Tenancy.BusinessUnits)
                             //.Include(u => u.Tenancy.BusinessUnits.Select(bu => bu.Settings))
                             //.Include(u => u.Tenancy.BusinessUnits.Select(bu => bu.Addresses))
                             .FirstOrDefault(u => u.UserId == currentUser.UserId && u.Void == false);

        HttpContext.Current.Session[Zahara.Web.Resources.DataKeys.SessionCurrentUser] = currentUser;

运行此方法时,HttpContext.Current.Session 为 NULL,我终生无法弄清楚为什么???

谢谢, 詹姆斯

【问题讨论】:

  • 会不会是你遇到了here提到的问题,在对应的答案here

标签: asp.net asp.net-mvc session model-view-controller


【解决方案1】:

更好的解决方案是将会话对象作为参数传递给辅助方法。

静态“天空挂钩”通常是不好的做法,会使您的代码更难测试。

或者,您可以为 HttpSessionStateBase 'LoadCustomerSessionData(user, businessUnit, db)' 创建一个扩展方法,这将是一种更流畅的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多