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
ConceitoDescricaoExemplo
MiddlewareComponente no pipeline que processa request/responseLogging, Auth, CORS, Exception Handling
RequestDelegateDelegate que representa o proximo middleware: Func<HttpContext, Task>await next(context)
Short-circuitMiddleware que nao chama next() β€” interrompe o pipelineAuth falha β†’ retorna 401 sem chegar ao endpoint
Terminal MiddlewareMiddleware que nunca chama next() por designapp.Run()

Middleware vs Filters

AspectoMiddlewareMVC Filters
EscopoTodo request HTTP β€” inclusive arquivos estaticos, health checksSomente requests que chegam ao MVC/Razor pipeline
Acesso ao contextoHttpContext apenasHttpContext + ActionContext, model binding, action arguments
GranularidadeGlobal β€” roda para tudoPode ser global, por controller ou por action
Quando usarCross-cutting: logging, CORS, error handling, compressionMVC-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).