ASPNET Middleware - gro1vy/DeliverServiceAPI GitHub Wiki

Что такое Middleware?

В ASP.NET, middleware - это концепция, которая представляет собой промежуточный слой или компонент, который обрабатывает запросы HTTP и ответы до того, как они достигают вашего приложения или после того, как они покидают ваше приложение. Middleware выполняет промежуточную обработку запросов и ответов и может включать в себя различные операции, такие как аутентификация, авторизация, логирование, маршрутизация и многое другое.

Вот как работает обработка запросов и ответов в ASP.NET:

  1. Запрос приходит от клиента (браузера) к вашему ASP.NET приложению.
  2. Запрос проходит через цепочку middleware компонентов.
  3. Каждый компонент middleware выполняет свои операции, такие как аутентификация, авторизация, логирование и другие.
  4. Затем запрос достигает вашего контроллера или действия, где обрабатывается логика вашего приложения.
  5. После этого ответ проходит обратно через цепочку middleware, где каждый компонент middleware может выполнить операции над ответом.
  6. Ответ отправляется обратно клиенту.

Сам middleware работает так, как показано на рисунке ниже, метод Middleware 1 next() запускает следующий уровень, Middleware 2. Middleware 2 завершает свои операции, а Middleware 3 выполняется с помощью метода next(). Когда промежуточное программное обеспечение 3 завершает свои операции, поскольку другого промежуточного программного обеспечения для запуска нет, оно возвращает результат операции на уровень промежуточного программного обеспечения 2, а промежуточное программное обеспечение 2 - на уровень промежуточного программного обеспечения 1.

Когда каждое промежуточное программное обеспечение завершает свой собственный процесс, оно вызывает следующий уровень с помощью метода next() и ожидает ответа от следующего уровня, не завершая свой собственный процесс. Эта спиральная структура называется трубопроводом (англ. pipeline). Промежуточное программное обеспечение должно завершить обработку и отправлять запрос до тех пор, пока весь конвейер не будет завершен.

Соответсвенно Middleware в ASP.NET Core является частью конвейера обработки запросов (Request Pipeline), и каждый компонент middleware выполняет определенные действия над запросом или ответом перед его передачей следующему компоненту в конвейере.

ASP.NET обеспечивает модульную структуру обработки запросов, которая позволяет легко добавлять, изменять и удалять компоненты middleware в вашем приложении, что делает его гибким и настраиваемым для различных потребностей и сценариев.

Как создать свой компонент Middleware в проекте ASP.NET?

Для этого необходимо создать класс, который принимает в конструкторе RequestDelegate, с обязательным асинхронным методом InvokeAsync, который принимает HttpContext и в котором происходит обработка запроса и ответа. После того, как мы закончили обрабатывать запрос мы с помощью "await _next(httpContext)" передаем управление следующей middleware, и когда последующие middleware закончат работу и обработают ответ мы должны обработать и ответ.

public class CustomMiddleware
{
    private readonly RequestDelegate _next;

    public CustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }
    
    public async Task InvokeAsync(HttpContext httpContext)
    {
        // Обрабатываем запрос

        await _next(httpContext);

        // Обрабатываем ответ
    }
}

Чтобы добавить наш middleware в Program.cs нужно добавить следующую строку. Стоит отметить, что порядок выполнения middleware зависит от порядка их добавлений.

app.UseMiddleware<CustomMiddleware>();