No desenvolvimento de aplicativos, o uso de middleware é uma prática comum e extremamente útil. Os middlewares são componentes que ajudam a gerenciar as solicitações HTTP em uma aplicação, permitindo a execução de lógicas antes ou depois do processamento principal. Eles desempenham um papel importante na construção de aplicativos robustos, escaláveis e fáceis de manter.
O que é Middleware?
Em termos simples, um middleware é um componente que fica entre a entrada e a saída de uma aplicação. Ele intercepta as solicitações e respostas HTTP e executa ações específicas. Os middlewares podem ser utilizados para realizar tarefas como autenticação, autorização, logging, manipulação de erros, compressão de dados, entre outros.
O diagrama a seguir demostra o funcionamento da conceito da pipeline de solicitação usando os middlewares.
Exemplos de Uso de Middleware em C#
Middleware de Logging
Um exemplo comum de uso no registro (logging) de solicitações HTTP. Podemos criar um middleware personalizado para registrar informações sobre cada solicitação recebida. Veja o exemplo de código abaixo:
public class LoggingMiddleware
{
private readonly RequestDelegate _next;
public LoggingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
// Lógica para registro de solicitações
await _next(context);
// Lógica para registro da resposta
}
}
Middleware de Autenticação
Outro exemplo útil é o middleware de autenticação, que verifica se o usuário está autenticado antes de permitir o acesso a determinadas rotas ou recursos. Aqui está um exemplo de um middleware de autenticação básico:
public class AuthenticationMiddleware
{
private readonly RequestDelegate _next;
public AuthenticationMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (!context.User.Identity.IsAuthenticated)
{
// Redirecionar para a página de login ou retornar um erro de autenticação
}
await _next(context);
}
}
Middleware de Manipulação de Erros
O middleware de manipulação de erros é usado para capturar exceções não tratadas e fornecer uma resposta adequada ao cliente. Aqui está um exemplo simples de middleware de manipulação de erros:
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
// Manipular a exceção e retornar uma resposta de erro adequada
}
}
}
Como adicionar o Middleware a sua aplicação
É possível conectar essa classe de middleware ao nosso aplicativo no arquivo Program.cs
usando o método UseMiddleware<T>()
:
//...Resto do Program.cs
app.UseMiddleware<LoggingMiddleware>();
//...Resto do Program.cs
Para classes de middleware muito simples, isso é suficiente. No entanto, muitas vezes usamos métodos de extensão em vez de UseMiddleware<T>()
porque eles nos fornecem outra camada de abstração:
namespace MinhaApi.Extensions
{
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseLoggingMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<LoggingMiddleware>();
}
}
}
Em seguida, usaríamos esse método de extensão da seguinte forma:
//...Resto do Program.cs
app.UseLoggingMiddleware();
//...Resto do Program.cs
Qualquer forma de fazer isso está correta. Pessoalmente, prefiro a clareza e a legibilidade da rota do método de extensão, mas você pode escolher o que preferir.
Importante ressaltar que a ordem com que é injetado os middlewares, será a ordem que eles serão executados.
Os middlewares em C# são poderosos componentes que nos permitem adicionar funcionalidades e lógicas específicas a uma aplicação web. Eles desempenham um papel fundamental na construção de aplicativos robustos, flexíveis e fáceis de manter. Com o conhecimento desses exemplos, você está pronto para começar a utilizar middlewares em suas próprias aplicações C# e aproveitar os benefícios que eles proporcionam.
Veja mais em: