Get an existing session in my BaseController constructor

Portekoi picture Portekoi · Aug 14, 2013 · Viewed 8.1k times · Source

In my Global.asax, i have this code in the Session_Start() :

UserIntranet user = new UserIntranet();
user.Login = this.Request.LogonUserIdentity.Name.Split('\\')[1];
Session["user"] = user as UserIntranet;

In my BaseController, i have this property :

public UserIntranet UserIntranet
{
    get 
    {
       return Session["user"] as UserIntranet; 
    }
}

It's working in all of mines controllers who use this base controller but not in my BaseController Constructor himself.

This session is Null...

Have try this in my BaseController :

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

Why? How can i get the user login directly in my BaseController? What is the better way?

Answer

Darin Dimitrov picture Darin Dimitrov · Aug 14, 2013

That's normal, all HttpContext related objects such as the Session are not yet initialized in the constructor of an ASP.NET MVC controller. This happens at a later stage, in the Initialize method that you could use:

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