HTML Diff
0 added 0 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 <p>Чтобы создать фильтр ресурсов потребуется реализовать один из двух интерфейсов на выбор:</p>
3 <p>Чтобы создать фильтр ресурсов потребуется реализовать один из двух интерфейсов на выбор:</p>
4 <ul><li><strong>IResourceFilter</strong>,</li>
4 <ul><li><strong>IResourceFilter</strong>,</li>
5 <li><strong>IAsyncResourceFilter</strong>.</li>
5 <li><strong>IAsyncResourceFilter</strong>.</li>
6 </ul><h2>Пример работы</h2>
6 </ul><h2>Пример работы</h2>
7 <p>Давайте представим, что нам требуется ограничить доступ к веб-сайту для старых браузеров типа проблемного IE. Для решения поставленных задач пригодится простой фильтр ресурсов.</p>
7 <p>Давайте представим, что нам требуется ограничить доступ к веб-сайту для старых браузеров типа проблемного IE. Для решения поставленных задач пригодится простой фильтр ресурсов.</p>
8 <p>Итак, добавим в наш проект следующий класс фильтра:</p>
8 <p>Итак, добавим в наш проект следующий класс фильтра:</p>
9 <p>Обратите внимание, что интерфейс<strong>IResourceFilter</strong>предоставляет 2 метода:</p>
9 <p>Обратите внимание, что интерфейс<strong>IResourceFilter</strong>предоставляет 2 метода:</p>
10 <ol><li>OnResourceExecuting(). Этот метод срабатывает после фильтров авторизации, однако до выполнения метода и до работы фильтров действий/результатов/исключений.</li>
10 <ol><li>OnResourceExecuting(). Этот метод срабатывает после фильтров авторизации, однако до выполнения метода и до работы фильтров действий/результатов/исключений.</li>
11 <li>OnResourceExecuted(). Тут срабатывание происходит после выполнения метода и фильтров действий/результатов/исключений.</li>
11 <li>OnResourceExecuted(). Тут срабатывание происходит после выполнения метода и фильтров действий/результатов/исключений.</li>
12 </ol><p>В качестве параметра в оба этих метода передается параметр типа<strong>ResourceExecutedContext</strong>-- он позволяет как получать данные запроса, так и управлять ответом.</p>
12 </ol><p>В качестве параметра в оба этих метода передается параметр типа<strong>ResourceExecutedContext</strong>-- он позволяет как получать данные запроса, так и управлять ответом.</p>
13 <p>В нашем случае мы проверяем заголовок "User-Agent". Если этот заголовок содержит подстроки, соответствующие браузеру Internet Explorer, то посредством свойства Result будет переустановлен ответ. Обработка запроса на этом завершится, а метод и последующие фильтры не выполнятся.</p>
13 <p>В нашем случае мы проверяем заголовок "User-Agent". Если этот заголовок содержит подстроки, соответствующие браузеру Internet Explorer, то посредством свойства Result будет переустановлен ответ. Обработка запроса на этом завершится, а метод и последующие фильтры не выполнятся.</p>
14 <p>А вот как можно реализовать эту задачу в асинхронной версии:</p>
14 <p>А вот как можно реализовать эту задачу в асинхронной версии:</p>
15 <p>Асинхронная версия определяет лишь один метод, принимающий еще и параметр<strong>ResourceExecutingContext</strong>. Причем 2-й параметр здесь -- это объект<strong>ResourceExecutionDelegate</strong>, предоставляющий делегат, вызов которого позволит передать обработку запроса дальше -- это могут быть следующие в конвейере фильтры либо непосредственно контроллер, либо страница Razor Page.</p>
15 <p>Асинхронная версия определяет лишь один метод, принимающий еще и параметр<strong>ResourceExecutingContext</strong>. Причем 2-й параметр здесь -- это объект<strong>ResourceExecutionDelegate</strong>, предоставляющий делегат, вызов которого позволит передать обработку запроса дальше -- это могут быть следующие в конвейере фильтры либо непосредственно контроллер, либо страница Razor Page.</p>
16 <p><em>По материалам https://metanit.com/sharp/aspnet5/.</em></p>
16 <p><em>По материалам https://metanit.com/sharp/aspnet5/.</em></p>
17  
17