π§ Middleware & Pipeline
Como o ASP.NET Core processa cada request β do primeiro middleware ao endpoint e de volta
Middleware forma uma cadeia bidirecional. Cada middleware pode agir antes e depois do next(). A ordem no
Program.cs define a ordem de execuΓ§Γ£o β e a ordem inversa para a resposta. O que e Middleware?
Middleware e um componente que fica no pipeline de request/response do ASP.NET Core. Cada middleware:
- Recebe o
HttpContext - Pode modificar o request antes de chamar
next() - Pode modificar o response depois de
next()retornar - Pode short-circuit β nao chamar next() e retornar direto
| Conceito | Descricao | Exemplo |
|---|---|---|
| Middleware | Componente no pipeline que processa request/response | Logging, Auth, CORS, Exception Handling |
| RequestDelegate | Delegate que representa o proximo middleware: Func<HttpContext, Task> | await next(context) |
| Short-circuit | Middleware que nao chama next() β interrompe o pipeline | Auth falha β retorna 401 sem chegar ao endpoint |
| Terminal Middleware | Middleware que nunca chama next() por design | app.Run() |
Middleware vs Filters
| Aspecto | Middleware | MVC Filters |
|---|---|---|
| Escopo | Todo request HTTP β inclusive arquivos estaticos, health checks | Somente requests que chegam ao MVC/Razor pipeline |
| Acesso ao contexto | HttpContext apenas | HttpContext + ActionContext, model binding, action arguments |
| Granularidade | Global β roda para tudo | Pode ser global, por controller ou por action |
| Quando usar | Cross-cutting: logging, CORS, error handling, compression | MVC-specific: validation, authorization por action, caching de resultado |
Middleware vs Filters β quando usar cada um?
Middleware roda para todo request HTTP, incluindo static files e health checks. Filters rodam apenas dentro do pipeline MVC/Razor, depois do routing. Use middleware para cross-cutting concerns globais (logging, CORS, exception handling). Use filters quando precisar de acesso ao ActionContext, model binding ou quiser granularidade por controller/action (authorization attributes, validation filters).