Фильтры исключений в ASP.net
Фильтры исключений служат для обработки необработанных исключений, однако обрабатывают они не все исключения.
- при создании объекта контроллера;
- при выполнении фильтров действий либо методов контроллера;
- при привязке модели.
Таким образом, фильтры исключений в ASP.net обрабатывают исключения, возникающие в фильтрах ресурсов/результатов либо при выполнении результата.
Это позволяет сделать вывод, что фильтры исключений в ASP.net не столь гибки, как, к примеру, компоненты middleware, которые тоже служат для обработки исключений.
Интерфейсы
Для работы с фильтрами исключений (Exception Filters) потребуется реализовать один из двух интерфейсов на выбор:
- IExceptionFilter,
- IAsyncExceptionFilter.
Существует возможность и по созданию класса фильтра исключений с его наследованием от абстрактного класса ExceptionFilterAttribute.
Методы для реализации
Если сравнивать с другими фильтрами, то Exception Filters поддерживают, в отличие от остальных, лишь один метод для каждого интерфейса:
OnException() для реализации IExceptionFilter,OnExceptionAsync() для реализации IAsyncExceptionFilter.
В качестве параметра в метод
Свойство context.ExceptionHandled
Если это свойство будет true, мы получим эффект обработанного исключения. То есть обработка продолжится, как будто никакого исключения и не было (браузеру отправится статус-код 200).
Для примера давайте определим следующий класс фильтра исключений:
Теперь воспользуемся параметром ExceptionContext, с помощью которого мы получим различные сведения об исключении, включая имя действия, в котором возникло исключение. Из полученной информации создадим объект ContentResult. Чтобы исключение считалось обработанным, следует установить, как было упомянуто выше, context.ExceptionHandled = true.
Применим данный фильтр к методу, в котором мы симулируем ошибочную ситуацию:
При обращении к данному методу у нас появится исключение -- деление числа на 0. Это исключение будет перехвачено соответствующим фильтром исключений, в результате чего мы увидим в своем веб-браузере информацию об исключении:
По материалам https://metanit.com/sharp/aspnet5/.