Почему мои переменные сеанса недоступны при построении контроллера? - PullRequest
3 голосов
/ 15 сентября 2009

Используя ASP.NET MVC при попытке получить информацию, хранящуюся в моем сеансе ["objectName"] от конструктора, я вижу, что сеанс еще не установлен, но как только контроллер был создан, тогда сеанс содержит правильная информация.

public class ABCController : Controller
{
   public ABCController() { var tmp = Session["Whatever"]; } //This line is null
   //But I know it has information

   public ActionResult Index() { var tmp = Session["Whatever"]; } //This works fine
}

Спасибо

Ответы [ 2 ]

13 голосов
/ 15 сентября 2009

Перезаписать метод Initialize базового класса Controller. Контекст запроса передается этому методу. Контекст сеанса является частью контекста запроса.

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);
        var tmp = requestContext.HttpContext.Session["Whatever"];
    }

Этот метод вызывается после создания контроллера и перед вызовом метода действия.

8 голосов
/ 15 сентября 2009

Сессия найдена в HttpContext. HttpContext предоставляется контроллеру как часть ControllerContext. Поскольку ControllerContext не передается в качестве аргумента конструктору, он недоступен до тех пор, пока класс не будет создан и не будет назначен ControllerContext. Однако он должен быть доступен любым способом на контроллере. Я не уверен, как можно ожидать, что свойства класса будут заполнены до вызова конструктора класса (если только они не являются статическими свойствами класса, но здесь это не так).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...