Получить существующий сеанс в моем конструкторе 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 ответ:
Это нормально, все
HttpContext
связанные объекты, такие какSession
, еще не инициализированы в конструкторе ASP.NET контроллер MVC. Это происходит на более позднем этапе, вInitialize
метод, который вы можете использовать:public BaseController: Controller { protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); ViewBag.UserMenu = this.UserIntranet.Login; } }