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