O que é Middleware em C#?


Em C#, especialmente no contexto do ASP.NET Core, middleware é um componente que faz parte do pipeline de requisição e resposta da aplicação. Ele intercepta as requisições HTTP que chegam à aplicação, podendo realizar ações antes de passar a requisição para o próximo middleware ou até mesmo encerrar o pipeline com uma resposta.
 
Imagine uma cadeia de etapas que uma requisição HTTP percorre até chegar ao seu destino (por exemplo, um controller). Cada uma dessas etapas é um middleware. Eles podem:
  • Executar lógica antes e/ou depois de outros middlewares.
  • Modificar a requisição antes que ela chegue ao controlador.
  • Modificar a resposta antes que ela seja enviada de volta ao cliente.
  • Encerrar o pipeline e devolver uma resposta diretamente (sem continuar para os próximos).

Alguns middlewares comuns no ASP.NET Core:

  • UseRouting() – define a lógica de roteamento.
  • UseAuthentication() – verifica a autenticação do usuário.
  • UseAuthorization() – verifica se o usuário tem permissão para acessar algo.
  • UseEndpoints() – executa os endpoints (como controllers ou minimal APIs).
  • UseStaticFiles() – serve arquivos estáticos como HTML, CSS, JS.
Além dos middlewares do ASP.NET Core, podemos criar nossos próprios, exemplo:
 public class MeuMiddleware  
 {  
   private readonly RequestDelegate _next;  
   public MeuMiddleware(RequestDelegate next)  
   {  
     _next = next;  
   }  
   public async Task InvokeAsync(HttpContext context)  
   {  
     Console.WriteLine("Antes do próximo middleware");  
     // Chama o próximo middleware no pipeline  
     await _next(context);  
     Console.WriteLine("Depois do próximo middleware");  
   }  
 }  
Após criado você adiciona no Program.cs ou Startup.cs:
 app.UseMiddleware<MeuMiddleware>();  

Outros exemplos de Middlewares

1 - Middleware de autenticação

Imagina que você tem um sistema com login, e o usuário manda uma requisição para acessar /perfil.

Middleware faz assim:
  • Ele verifica se a requisição tem um token de autenticação JWT.
  • Se tiver, ele confere se esse token é válido.
  • Se for válido, ele deixa passar.
  • Se não for, ele bloqueia e devolve: “401 Não autorizado”.
Middleware usado: app.UseAuthentication();

2 - Middleware de autorização

Agora que o usuário já está autenticado, ele tenta acessar /admin/painel.

Middleware faz assim:
  • Verifica se o usuário tem permissão de “Administrador”.
  • Se sim, continua a requisição até o endpoint.
  • Se não, ele corta ali e devolve: “403 Proibido”.
Middleware usado: app.UseAuthorization();

3 - Middleware de log de requisições

Toda vez que alguém acessar seu sistema, você quer registrar quem acessou e o que acessou, pra análise ou segurança.

Você cria um middleware personalizado que:
  • Lê o IP do usuário, o endpoint acessado e horário.
  • Grava isso num log ou banco de dados.
  • Deixa a requisição seguir normalmente.
Exemplo de código:
 public class LoggingMiddleware  
 {  
   private readonly RequestDelegate _next;  
   public LoggingMiddleware(RequestDelegate next) => _next = next;  
   public async Task InvokeAsync(HttpContext context)  
   {  
     Console.WriteLine($"[{DateTime.Now}] - Acessado: {context.Request.Path}");  
     await _next(context); // continua pro próximo middleware ou endpoint  
   }  
 }  
No Program.cs:
app.UseMiddleware<LoggingMiddleware>();  

Conclusão

Middleware é como um porteiro que verifica e/ou modifica algo a cada requisição que entra ou sai.

Na prática, é usado pra:
  • Autenticar usuários (tem login?)
  • Verificar permissões (pode acessar?)
  • Registrar informações (quem acessou o quê?)
  • Alterar ou controlar o fluxo da requisição e etc.

Comentários