Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在我的BaseController构造函数中获取现有会话_C#_Asp.net Mvc_Session_Asp.net Mvc Controller - Fatal编程技术网

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

C# 在我的BaseController构造函数中获取现有会话,c#,asp.net-mvc,session,asp.net-mvc-controller,C#,Asp.net Mvc,Session,Asp.net Mvc Controller,在my Global.asax中,会话_Start()中有以下代码: 在我的BaseController中,我有以下属性: public UserIntranet UserIntranet { get { return Session["user"] as UserIntranet; } } 它适用于所有使用此基本控制器的矿山控制器,但不适用于我的基本控制器构造函数本身 此会话为空 请在我的BaseController中尝试以下操作: public B

在my Global.asax中,会话_Start()中有以下代码:

在我的BaseController中,我有以下属性:

public UserIntranet UserIntranet
{
    get 
    {
       return Session["user"] as UserIntranet; 
    }
}
它适用于所有使用此基本控制器的矿山控制器,但不适用于我的基本控制器构造函数本身

此会话为空

请在我的BaseController中尝试以下操作:

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

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

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

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

什么意思?覆盖该方法?但我如何才能获得现有的会话?你能给我举个例子吗?当然,我已经用一个例子更新了我的答案。不要试图在控制器的构造函数中使用会话,你应该重写
Initialize
方法,你可以在那里使用会话。你是我的英雄:)非常感谢!
public BaseController: Controller
{
    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        ViewBag.UserMenu = this.UserIntranet.Login;
    }
}