Я использую AuthorizeAttribute на разных контроллерах, которым может потребоваться вернуть 403 или 429 (слишком много запросов) на основе определенных атрибутов самого запроса. Я реализовал его полностью в рамках пользовательской реализации OnAuthorization, а затем при необходимости добавил новое исключение HttpResponseException с соответствующим кодом ответа. Хорошо работал на моей машине...
В масштабе (много тысяч запросов в минуту) эта реализация отстойна до такой степени, что она разбивала сайт. Перемещение одной и той же логики в действие самого контроллера и просто возвращение соответствующего HttpResponseMessage прекрасно работают с точки зрения перфоманса, поэтому кажется, что затраты на выброс исключения в OnAuthorization являются основной причиной проблем с перфомансом.
Мне нравится идея реализовать это в атрибуте, который я могу использовать, чтобы украсить несколько контроллеров и действий, и я неловко не люблю перемещать даже небольшие количества логики в действия контроллера, которые затем повторяются много раз. Можно ли вернуть соответствующий HTTP-статус из аннотации, не вызывая исключения? Даже если он не наследуется от AuthorizeAttribute, оформление кода таким образом было бы намного предпочтительнее.
Изменить: это Web API 2, а не MVC