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