Расширить 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.

Другие вопросы по тегам