Conheça o poder do Middleware!

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.

Diagrama de funcionamento dos 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:

C#
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:

C#
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:

C#
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>():

C#
//...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:

C#
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:

C#
//...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:

Compartilhe:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima