在我的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中直接获得用户登录?什么是更好的方法?
这很正常,所有与HttpContext
相关的对象(如Session
)尚未在ASP.NET MVC控制器的构造函数中初始化。这发生在稍后的阶段,在您可以使用的Initialize
方法中:
public BaseController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
ViewBag.UserMenu = this.UserIntranet.Login;
}
}