Почему анонимный пользователь все еще создает контроллер с пометкой [Авторизовать]? - PullRequest
1 голос
/ 03 апреля 2012

У меня есть некоторый код в конструкторе моего контроллера, который работает, только когда пользователь вошел в систему. Я пометил контроллер как [Authorize] и / или добавил следующее в global.asax (в MVC4):

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new System.Web.Mvc.AuthorizeAttribute());
}

Однако мой контроллер все еще создается, и, таким образом, происходит исключение. Это по замыслу, или я что-то настроил неправильно? Я хотел бы, чтобы авторизация активировала и отправила пользователя на мой маршрут / страницу входа в систему, даже не создавая защищенный контроллер.

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Контроллер должен быть создан (ControllerFactory), прежде чем его атрибуты (например, Authorize) будут проверены.Поэтому, когда анонимный пользователь пытается вызвать действие на контроллере, помеченном Authorize, контроллер должен быть создан.Если есть код инициализации, который необходимо выполнить только после авторизации пользователя, это следует делать в действии, которое авторизует пользователя, а не в конструкторе.

4 голосов
/ 03 апреля 2012

Каркас не может прочитать атрибут, пока не будет создан контроллер.Таким образом, Authorize не вызывается, пока не найдется объект для его вызова.

...