【问题标题】:Get an existing session in my BaseController constructor在我的 BaseController 构造函数中获取现有会话
【发布时间】:2023-03-21 22:56:01
【问题描述】:

在我的 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 中获取用户登录?有什么更好的方法?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 什么意思?覆盖方法?但是我怎样才能得到这个现有的会话?可以举个例子吗?
    • 当然,我已经用一个例子更新了我的答案。不要尝试在控制器的构造函数中使用 Session,你应该重写 Initialize 方法,你可以在那里使用会话。
    • 你是我的英雄 :) 非常感谢!
    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 2017-05-23
    • 2021-04-26
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多