В чём отличие между middleware и фильтрами в .Net?
Начал углубленно изучать ASP.NET и в ходе изучения и написания кода задался вопросом, на который не нашёл конкретный ответ. Чем отличаются middleware и фильтры? Насколько я понял фильтры в конвеере запросов обтрабатывают после роутинга middleware. Такие вещи как авторизация можно так же благополучно реализовать в middleware, как и огромное количество другого функционала. Так чем же отличаются, если выполняются так же в ковеере запрсов, просто с разной последовательностью.
Дополнительно:
В принципе, вам уже ответили на этот вопрос, для варианта когда фильтрация используется в монолитном приложении ASP.NET MVC. Но фильтрацию можно также использовать и на уровне API.NET, где также после обработки запроса в конвейере, внутри одного из middleware, может быть применена фильтрация на основе передаваемых параметров. Пример настройки такой фильтрации в API.NET есть в видео.
Middleware работают на уровне запросов, а фильтры на уровне слоя MVC, применяются для контроллеров, actions.
- Мне задавали вопрос на собеседовании, в чём отличие middleware и фильтров. Я ответил что фильтры являются частью механизма MVC и работают на его уровне обработки запросов после всех middleware. На это мне ответили, что я не прав и фильтры относятся к всему ASP.NET CORE и отрабатывают после маршрутизации по конкретным контроллерам и действиям в виде http методов контроллера. На этом моменте я окончательно запутался.
- https://learn.microsoft.com/ru-ru/aspnet/core/mvc/...
Middleware - это часть ASP.NET Core. Они занимаются обработкой HTTP запроса, могут его изменять/дополнять. Например, производить авторизацию или, если запрос пришел от прокси, то разворачивать отображать HTTP заголовки
Фильтры - это часть MVC, фреймворка внутри ASP.NET Core. Т.е. они часть контроллеров и предназначаются только для них, но могут работать и как Middleware (HttpContext поле доступно). Дополнительно, у них есть иерархия вызовов, в зависимости от типа фильтра, а middleware вызываются каждая и в зависимости от порядка их регистрации
- На счёт того, что фильтры являются частью MVC благо я знаю, и насколько я помню, после основного конвеера запросов с middleware идёт MVC конвеер, где и происходит фильтрация. Но можно ли использовать фильтры в обычных api контроллерах без MVC, и в каком тогда порядке отработают фильтры?
- SamMorgan, api контроллеры - это и есть mvc
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Middleware и фильтры являются двумя различными концепциями в .Net, используемыми для обработки запросов и ответов веб-приложений.
Middleware - это компонент, который выполняет операции обработки запроса и/или ответа перед или после выполнения основного обработчика запроса. Middleware добавляется в конвейер обработки запросов и может выполнять различные операции, такие как аутентификация, авторизация, логирование, кэширование и т.д. Middleware работает в виде цепочки, в которой каждый компонент обрабатывает запрос и передает его следующему компоненту в цепочке.
Фильтры, с другой стороны, используются для выполнения дополнительных операций до или после выполнения действия контроллера. Фильтры позволяют добавить логику предварительной или последующей обработки запроса на уровне контроллера. В .Net существуют различные типы фильтров, такие как авторизационные, аутентификационные, ресурсные, и другие.
Отличие между middleware и фильтрами заключается в том, что middleware работает на уровне обработки запросов до того, как запрос попадает в контроллер, в то время как фильтры работают на уровне контроллера и могут применяться только к конкретным действиям контроллера. Middleware может выполняться независимо от контроллера и предоставляет более гибкую и масштабируемую архитектуру для обработки запросов и ответов.
Пример использования middleware в .Net:
public class CustomMiddleware { private readonly RequestDelegate _next; public CustomMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { // Логика обработки запроса await _next(context); // Логика обработки ответа } }
Пример использования фильтра в .Net:
public class CustomFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext context) { // Логика предварительной обработки запроса } public override void OnActionExecuted(ActionExecutedContext context) { // Логика последующей обработки ответа } }
Таким образом, middleware и фильтры предоставляют различные способы обработки запросов и ответов в .Net приложениях и могут использоваться в зависимости от конкретных требований и задач при разработке веб-приложений.