asp.net mvc не может получить доступ к данным cookie в базовом контроллере - PullRequest
4 голосов
/ 31 августа 2009

Для каждой запрашиваемой страницы мне нужно проверить файл cookie или создать его, если его там нет. Если файл cookie существует, мне нужно загрузить некоторую информацию из БД на основе содержимого этого файла cookie.

Для этого я создал базовый контроллер под названием AppController, от которого наследуются другие мои контроллеры.

тогда у меня что-то вроде этого (так что объект CurrentSessionValues ​​доступен для всех моих контроллеров):

    public MySession CurrentSessionValues;
    public ApplicationController()
    {
        if (Request.Cookies["MySiteCookie"] == null)
        {
            // create new Record in DB
            CurrentSessionValues = CreateMySession();
            HttpCookie cookie = new HttpCookie("MySiteCookie");
            cookie.Value = CurrentSessionValues.SessionID.ToString;
            Response.SetCookie(cookie);
        }
        else
        {
           // use the value in MySiteCookie to get values from the DB
           // e.g. logged in user id, cart id, etc
        }

    }

Когда я запускаю это, я получаю эту ошибку в default.aspx:

Произошла ошибка при создании контроллер типа 'Mvc_Learn.Controllers.HomeController'.

Если у контроллера нет контроллер фабрики, убедитесь, что он имеет открытый конструктор без параметров.

Это прерывается по запросу. Cookies ["MySiteCookie"]

Должен ли я делать эту логику каким-то другим образом или в другом месте?

Ответы [ 2 ]

9 голосов
/ 31 августа 2009

Хитрость в том, что у вас нет необходимого контекста в конструкторе. Скорее, вы должны переопределить метод Initialize:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    //check request context for cookie and do your thang.
}

PS: для потомков я должен отметить, почему возникает ошибка. Ключевой частью информации об исключении является то, что при создании контроллера произошла ошибка, в этом случае бит конструктора без параметров является красной сельдью. Произошедшая ошибка была исключением из-за пустой ссылки на HttpContext.

0 голосов
/ 31 августа 2009

Убедитесь, что HomeController имеет открытый конструктор без параметров, и убедитесь, что родительский конструктор ApplicationController() вызывается.

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