Получить существующий сеанс в моем конструкторе BaseController


В моем глобальном.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; 
    }
}

Он работает во всех контроллерах mines, которые используют этот базовый контроллер, но не в моем конструкторе BaseController.

Эта сессия является нулевой...

Попробуйте это в моем BaseController:

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

Почему? Как я могу получить логин пользователя непосредственно в моем BaseController? Что может быть лучше?

1 4

1 ответ:

Это нормально, все HttpContext связанные объекты, такие как Session, еще не инициализированы в конструкторе ASP.NET контроллер MVC. Это происходит на более позднем этапе, вInitialize метод, который вы можете использовать:

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