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

Por*_*koi 4 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;
Run Code Online (Sandbox Code Playgroud)

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

public UserIntranet UserIntranet
{
    get 
    {
       return Session["user"] as UserIntranet; 
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于所有使用此基本控制器但不在我的BaseController构造函数中的矿山控制器.

这个会议是空的......

在我的BaseController中尝试这个:

public BaseController()
{
    ViewBag.UserMenu = this.UserIntranet.Login;/* Null */
}
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 19

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

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