ASPNET Middleware - gro1vy/DeliverServiceAPI GitHub Wiki
Что такое Middleware?
В ASP.NET, middleware - это концепция, которая представляет собой промежуточный слой или компонент, который обрабатывает запросы HTTP и ответы до того, как они достигают вашего приложения или после того, как они покидают ваше приложение. Middleware выполняет промежуточную обработку запросов и ответов и может включать в себя различные операции, такие как аутентификация, авторизация, логирование, маршрутизация и многое другое.
Вот как работает обработка запросов и ответов в ASP.NET:
- Запрос приходит от клиента (браузера) к вашему ASP.NET приложению.
- Запрос проходит через цепочку middleware компонентов.
- Каждый компонент middleware выполняет свои операции, такие как аутентификация, авторизация, логирование и другие.
- Затем запрос достигает вашего контроллера или действия, где обрабатывается логика вашего приложения.
- После этого ответ проходит обратно через цепочку middleware, где каждый компонент middleware может выполнить операции над ответом.
- Ответ отправляется обратно клиенту.
Сам 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>();