HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: asp.net, фильтры исключений</p>
1 <p>Теги: asp.net, фильтры исключений</p>
2 <p><strong>Фильтры исключений</strong>служат для обработки необработанных исключений, однако обрабатывают они не все исключения. Например, такие фильтры обрабатывают необработанные исключения, появляющиеся:</p>
2 <p><strong>Фильтры исключений</strong>служат для обработки необработанных исключений, однако обрабатывают они не все исключения. Например, такие фильтры обрабатывают необработанные исключения, появляющиеся:</p>
3 <ul><li>при создании объекта контроллера;</li>
3 <ul><li>при создании объекта контроллера;</li>
4 <li>при выполнении фильтров действий либо методов контроллера;</li>
4 <li>при выполнении фильтров действий либо методов контроллера;</li>
5 <li>при привязке модели.</li>
5 <li>при привязке модели.</li>
6 </ul><p>Таким образом, фильтры исключений в<strong>ASP.net</strong>обрабатывают исключения, возникающие в фильтрах ресурсов/результатов либо при выполнении результата.</p>
6 </ul><p>Таким образом, фильтры исключений в<strong>ASP.net</strong>обрабатывают исключения, возникающие в фильтрах ресурсов/результатов либо при выполнении результата.</p>
7 <p>Это позволяет сделать вывод, что фильтры исключений в ASP.net не столь гибки, как, к примеру, компоненты<strong>middleware</strong>, которые тоже служат для обработки исключений.</p>
7 <p>Это позволяет сделать вывод, что фильтры исключений в ASP.net не столь гибки, как, к примеру, компоненты<strong>middleware</strong>, которые тоже служат для обработки исключений.</p>
8 <h2>Интерфейсы</h2>
8 <h2>Интерфейсы</h2>
9 <p>Для работы с фильтрами исключений (<strong>Exception Filters</strong>) потребуется реализовать один из двух интерфейсов на выбор:</p>
9 <p>Для работы с фильтрами исключений (<strong>Exception Filters</strong>) потребуется реализовать один из двух интерфейсов на выбор:</p>
10 <ul><li><strong>IExceptionFilter</strong>,</li>
10 <ul><li><strong>IExceptionFilter</strong>,</li>
11 <li><strong>IAsyncExceptionFilter</strong>.</li>
11 <li><strong>IAsyncExceptionFilter</strong>.</li>
12 </ul><p>Существует возможность и по созданию класса фильтра исключений с его наследованием от абстрактного класса<strong>ExceptionFilterAttribute</strong>.</p>
12 </ul><p>Существует возможность и по созданию класса фильтра исключений с его наследованием от абстрактного класса<strong>ExceptionFilterAttribute</strong>.</p>
13 <h2>Методы для реализации</h2>
13 <h2>Методы для реализации</h2>
14 <p>Если сравнивать с другими фильтрами, то<strong>Exception Filters</strong>поддерживают, в отличие от остальных, лишь один метод для каждого интерфейса:</p>
14 <p>Если сравнивать с другими фильтрами, то<strong>Exception Filters</strong>поддерживают, в отличие от остальных, лишь один метод для каждого интерфейса:</p>
15 <ul><li>OnException() для реализации<strong>IExceptionFilter</strong>,</li>
15 <ul><li>OnException() для реализации<strong>IExceptionFilter</strong>,</li>
16 <li>OnExceptionAsync() для реализации<strong>IAsyncExceptionFilter</strong>.</li>
16 <li>OnExceptionAsync() для реализации<strong>IAsyncExceptionFilter</strong>.</li>
17 </ul><p>В качестве параметра в метод OnException() передается объект<strong>ExceptionContext</strong>, содержащий все информационные данные о возникшем исключении.</p>
17 </ul><p>В качестве параметра в метод OnException() передается объект<strong>ExceptionContext</strong>, содержащий все информационные данные о возникшем исключении.</p>
18 <h2>Свойство context.ExceptionHandled</h2>
18 <h2>Свойство context.ExceptionHandled</h2>
19 <p>Если это свойство будет true, мы получим эффект обработанного исключения. То есть обработка продолжится, как будто никакого исключения и не было (браузеру отправится статус-код 200).</p>
19 <p>Если это свойство будет true, мы получим эффект обработанного исключения. То есть обработка продолжится, как будто никакого исключения и не было (браузеру отправится статус-код 200).</p>
20 <p>Для примера давайте определим следующий класс фильтра исключений:</p>
20 <p>Для примера давайте определим следующий класс фильтра исключений:</p>
21 - <p>Теперь воспользуемся параметром<strong>ExceptionContext</strong>, с помощью которого мы получим различные сведения об исключении, включая имя действия, в котором возникло исключение. Из полученной информации создадим объект<strong>ContentResult</strong>. Чтобы исключение считалось обработанным, следует установить, как было упомянуто выше,<strong>context.ExceptionHandled = true</strong>.</p>
21 + <p>Теперь воспользуемся параметром<strong>ExceptionContext</strong>, с помощью которого мы получим различные сведения об исключении, включая имя действия, в котором возникло исключение. Из полученной информации создадим объект<strong>ContentResult</strong>. Чтобы исключеие считалось обработанным, следует установить, как было упомянуто выше,<strong>context.ExceptionHandled = true</strong>.</p>
22 <p>Применим данный фильтр к методу, в котором мы симулируем ошибочную ситуацию:</p>
22 <p>Применим данный фильтр к методу, в котором мы симулируем ошибочную ситуацию:</p>
23 <p>При обращении к данному методу у нас появится исключение -- деление числа на 0. Это исключение будет перехвачено соответствующим фильтром исключений, в результате чего мы увидим в своем веб-браузере информацию об исключении:</p>
23 <p>При обращении к данному методу у нас появится исключение -- деление числа на 0. Это исключение будет перехвачено соответствующим фильтром исключений, в результате чего мы увидим в своем веб-браузере информацию об исключении:</p>
24 <p><em>По материалам https://metanit.com/sharp/aspnet5/.</em></p>
24 <p><em>По материалам https://metanit.com/sharp/aspnet5/.</em></p>
25  
25