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

本文关键字:一个 会话 BaseController 我的 构造函数 获取 | 更新日期: 2023-09-27 18:27:43

在我的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构造函数。

此会话为Null。。。

请在我的BaseController中尝试一下:

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

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

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

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

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