Перейти к содержанию

Фильтры или промежуточное ПО: что выбрать?

Три основных параллели между фильтрами и промежуточным ПО:

  • запросы проходят через компонент промежуточного ПО на пути “внутрь”, а ответы снова проходят через него “на выходе”. Фильтры ресурсов, действий и результатов также являются двухсторонними, хотя фильтры авторизации и исключений запускаются один раз, а фильтры страниц — трижды;
  • промежуточное ПО может завершить запрос, вернув ответ, вмето того, чтобы передать его более позднему компоненту. Фильтры также могут прервать выпонение, возвращая ответ;
  • промежуточное ПО часто используется для решения сквозных задач приложения, таких как журналирование, профилирование производительности и обработка исключений. Фильтры также подходят для решения проблем такого рода.

Три основных различия:

  • промежуточное ПО может выполняться для всех запросов; фильтры будут выполнятся только для запросов, доходящих до компонента EndpointMiddleware и выполняющих действие контроллера API, или страницу Razor;
  • фильтры имеют доступ к конструкциям MVC, таким, как ModelState и IActionResults. Промежуточное ПО работает на “более низком уровне”, чем MVC и Razor Pages;
  • фильтры можно легко применить к подмножеству запросов; промежуточное ПО не имеет этой концепции в качестве полноправной сущности.

Из вышесказанного может следовать следующее. Промежуточное ПО — более общая концепция, которая работает с низкоуровневыми примитивами, такими как HttpContext, и имеет более широкий охват. Если необходимая функциональность не имеет требований, связанных с MVC — следует использовать промежуточное ПО. Отличный пример — обработка исключений.
С другой стороны, если требуется доступ к конструкциям MVC, или иное поведение для некоторых действий MVC — следует рассмотреть возможность использования фильтра.
Также можно использовать компоненты промежуточного ПО в качестве фильтров, об этом можно посмотреть здесь.


Последнее обновление : 3 мая 2023 г.
Дата создания : 3 октября 2022 г.

Комментарии

Комментарии