Фильтры ресурсов в ASP.net
Фильтры ресурсов применяются в ASP.net в целях переопределения результата действия. Это бывает полезно, к примеру, при кэшировании: в фильтре ресурсов вы можете получить кэш и сразу установить результат без повторной генерации этого результата в методах контроллера.
Создать фильтр ресурсов можно одним из двух способов: - реализовать интерфейс IResourceFilter; - реализовать интерфейс IAsyncResourceFilter.
Давайте представим, что нам необходимо ограничить доступ к веб-сайту для старых веб-браузеров типа того же IE. Для решения поставленной задачи мы можем разработать простейший фильтр ресурсов.
Итак, добавим в наш проект следующий класс фильтра:
Интерфейс IResourceFilter предоставляет нам 2 метода:
OnResourceExecuting() : срабатывает непосредственно ПОСЛЕ фильтров авторизации, однако ДО выполнения метода и ДО работы фильтров действий, фильтров исключений и фильтров результатов.OnResourceExecuted() : срабатывает непосредственно ПОСЛЕ выполнения метода и фильтров действий, фильтров исключений и фильтров результатов.
В качестве параметра в эти два метода передается параметр типа ResourceExecutedContext -- он позволяет получать данные запроса, управляя ответом.
В нашем случае мы проверяем заголовок "User-Agent". Если этот заголовок содержит соответствующие веб-браузеру Internet Explorer подстроки, тогда посредством свойства Result мы переустанавливаем ответ -- на этом обработка запроса заканчивается, а метод и последующие фильтры уже не выполняются.
Асинхронная версия реализации
Теперь давайте посмотрим на реализацию такой же задачи, но уже посредством асинхронной версии:
По материалам https://metanit.com/sharp/aspnet5/.