Расширить AuthorizeAttribute Override AuthorizeCore или OnAuthorization
Используя ASP.NET MVC, я создаю собственный атрибут Authorize, чтобы позаботиться о некоторой пользовательской логике авторизации. Я рассмотрел много примеров, и это довольно просто, но мой вопрос в том, какой метод лучше переопределить, AuthorizeCore или OnAuthorization? Я видел много примеров, перекрывающих один или другой. Есть ли разница?
2 ответа
Подсказка в возвращаемых типах:
AuthorizeCore
возвращает логическое значение - это код принятия решения. Это должно быть ограничено просмотром личности пользователя и проверкой его ролей и т. Д. И т. Д. По сути, это должно дать ответ на вопрос:
Do I want this user to proceed?
Он не должен выполнять никаких дополнительных действий "на стороне".
OnAuthorize
возвращает void - это то место, куда вы помещаете любую функциональность, которая должна появиться на этом этапе. например, запись в журнал, сохранение некоторых данных в сеансе и т. д.
Вы должны поместить любой код, который должен работать, независимо от того, авторизуется ли пользователь впервые или использует ли он кэшированную авторизацию в AuthorizeCore
,
Если вы посмотрите на исходный код, вы можете увидеть, что AuthorizeCore
вызывается обоими OnAuthorize
а также OnCacheAuthorization
, Это позволяет кэшировать авторизацию, но при этом разрешать определенные действия и принимать фактические решения об авторизации.
Если вам нужно что-то из AuthorizationContext, вы можете создать свойство для хранения информации, а затем получить к нему доступ в методе AuthorizeCore.