В чём отличие между middleware и фильтрами в .Net?

Ссылка скопирована
1 ответ

Начал углубленно изучать 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
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

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);
        // Логика обработки ответа
    }
}

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)
    {
        // Логика последующей обработки ответа
    }
}

public class CustomFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext context) { // Логика предварительной обработки запроса } public override void OnActionExecuted(ActionExecutedContext context) { // Логика последующей обработки ответа } }

Таким образом, middleware и фильтры предоставляют различные способы обработки запросов и ответов в .Net приложениях и могут использоваться в зависимости от конкретных требований и задач при разработке веб-приложений.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно