在我的BaseController构造函数中获取现有会话

时间:2013-08-14 14:22:02

标签: c# asp.net-mvc session asp.net-mvc-controller

在我的Global.asax中,我在Session_Start()中有这段代码:

UserIntranet user = new UserIntranet();
user.Login = this.Request.LogonUserIdentity.Name.Split('\\')[1];
Session["user"] = user as UserIntranet;

在我的BaseController中,我有这个属性:

public UserIntranet UserIntranet
{
    get 
    {
       return Session["user"] as UserIntranet; 
    }
}

它适用于使用此基本控制器的所有矿场控制器,但不在我自己的BaseController构造函数中。

此会话为空......

在我的BaseController中试试这个:

public BaseController()
{
    ViewBag.UserMenu = this.UserIntranet.Login;/* Null */
}

为什么呢?如何让用户直接在我的BaseController中登录?有什么更好的方法?

1 个答案:

答案 0 :(得分:19)

这是正常的,所有HttpContext相关对象(例如Session)尚未在ASP.NET MVC控制器的构造函数中初始化。这可以在稍后阶段使用您可以使用的Initialize方法:

public BaseController: Controller
{
    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        ViewBag.UserMenu = this.UserIntranet.Login;
    }
}