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”.
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”.
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.
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
Postar um comentário