Жизненный цикл атрибута авторизации

Может ли кто-нибудь объяснить, почему жизненный цикл атрибута авторизации управляется относительно класса или метода, к которому он применяется? Этим можно управлять не относительно жизненного цикла запроса.

Если я украшаю контроллер на уровне класса, конструктор атрибутов авторизации вызывается только один раз для нескольких запросов к одному и тому же контроллеру. Если я украшаю каждый метод контроллера, я получаю новые вызовы конструктора атрибута авторизации для каждого вызываемого метода контроллера.

Что это за поведение? Я ожидал, что создание атрибута авторизации будет происходить при каждом запросе.


person Daniel    schedule 27.09.2013    source источник
comment
Как вы определяете, что он вызывается только один раз при применении к классу? AFAIK, контроллер создается и уничтожается с каждым запросом. Это вроде как должно быть, иначе вы столкнетесь с проблемой перекрестного запроса. Возможно, что при отладке в Visual Studio по какой-то причине это обходится, но если вы получаете один и тот же экземпляр контроллера для каждого запроса в реальном IIS, тогда возникает проблема.   -  person Chris Pratt    schedule 27.09.2013
comment
Крис, я не говорил о жизненном цикле контроллера. Скорее, я спрашиваю о жизненном цикле AuthorizeAttribute. AuthorizeAttribute создается не для каждого запроса, как я ожидал. К сожалению, это приводит к некоторым проблемам для этого текущего приложения, потому что мы должны изменять роли во время выполнения.   -  person Daniel    schedule 14.10.2013


Ответы (1)


ASP.NET MVC будет кэшировать ActionFilters и пытаться повторно использовать их в последующих запросах. Фактическая авторизация будет происходить по каждому запросу, но подрядчик будет вызван только при первом запросе. Вы не должны поддерживать какое-либо внутреннее состояние в ActionFilter.

person Mark Olsen    schedule 04.12.2013
comment
Марк Олсен, у вас есть ссылка, где это поведение является документом? - person user3285954; 27.03.2020