ASP.NET Core 7 - Novos Recursos


  Hoje vou apresentar um resumo de cinco novos recursos disponíveis na ASP.NET Core 7.

A versão 7.0 da ASP .NET Core trouxe novos recursos para middleware, minimal APis e mais. Vejamos a seguir os principais.

1- Middleware de cache de saída

A ASP.NET Core 7 permite que você use o cache de saída em todos os aplicativos ASP.NET Core: Minimal API, MVC, Razor Pages e aplicativos Web API com controladores.

Para adicionar o middleware de cache de saída à coleção de serviços, invoque o método de extensão IServiceCollection.AddOutputCache.

Para adicionar o middleware ao pipeline de processamento de solicitação, chame o método de extensão IApplicationBuilder.UseOutputCache.

Em seguida, para adicionar uma camada de cache a um endpoint, você pode usar o seguinte código:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () => "Olá Mundo!").CacheOutput();

app.Run();

2- ASP.NET Core : Usando Rate Limiting

Controlar a taxa na qual os clientes podem fazer solicitações aos endpoints é uma importante medida de segurança que permite que os aplicativos da Web evitem ataques mal-intencionados. Você pode evitar ataques de negação de serviço, por exemplo, limitando o número de solicitações provenientes de um único endereço IP em um determinado período de tempo. O termo para esta capacidade é limitação de taxa.

O middleware Microsoft.AspNetCore.RateLimiting no ASP.NET Core 7 pode ajudá-lo a impor a limitação de taxa em seu aplicativo. Você pode configurar políticas de limitação de taxa e, em seguida, anexar essas políticas aos endpoints, protegendo assim esses endpoints contra ataques de negação de serviço. Esse middleware é particularmente útil para aplicativos da Web voltados para o público que são suscetíveis a esses ataques.

Você pode usar o middleware de limitação de taxa com aplicativos ASP.NET Core Web API, ASP.NET Core MVC e ASP.NET Core Minimal API. Para começar a usar esse middleware integrado, adicione o pacote NuGet Microsoft.AspNetCore.RateLimiting ao seu projeto executando o seguinte comando no prompt de comando do Visual Studio:

dotnet add package Microsoft.AspNetCore.RateLimiting

Como alternativa, você pode adicionar este pacote ao seu projeto executando o seguinte comando no console do gerenciador de pacotes NuGet ou na janela do console:

Install-Package Microsoft.AspNetCore.RateLimiting

Após a instalação do middleware de limitação de taxa, inclua o trecho de código fornecido abaixo em seu arquivo Program.cs para adicionar serviços de limitação de taxa com a configuração padrão.

builder.Services.AddRateLimiter(options => { });

Veja uma apresentação mais detalhada neste vídeo: ASP.NET Core :  Usando Rate Limiting

3- Middleware de decompressão de request

A ASP.NET Core 7 inclui um novo middleware de descompactação de requesição que permite que os endoints aceitem requests com conteúdo compactado.

Isso elimina a necessidade de escrever código explicitamente para descompactar requests com conteúdo compactado. Ele funciona usando um cabeçalho HTTP de codificação de conteúdo para identificar e descompactar conteúdo compactado em solicitações HTTP.

Em resposta a uma solicitação HTTP que corresponda ao valor do cabeçalho Content-Encoding, o middleware encapsula o HttpRequest.Body em um fluxo de descompactação adequado usando o provedor correspondente.

Isso é seguido pela remoção do cabeçalho Content-Encoding, que indica que o corpo da solicitação não está mais compactado. Observe que o middleware de descompactação de solicitação ignora solicitações sem um cabeçalho Content-Encoding. O trecho de código abaixo mostra como você pode ativar a descompactação de solicitação para os tipos de codificação de conteúdo padrão.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRequestDecompression();

var app = builder.Build();

app.UseRequestDecompression();

app.MapPost("/", (HttpRequest httpRequest) => Results.Stream(httpRequest.Body));

app.Run();

Os provedores de descompactação padrão são os formatos de compactação Brotli, Deflate e Gzip. Seus valores de cabeçalho de codificação de conteúdo são br, deflate e gzip, respectivamente.

4- Associação de parâmetros em métodos Action usando DI

Com a ASP.NET Core 7, você pode aproveitar a injeção de dependência para vincular parâmetros nos métodos Action de seus controladores de API.

Portanto, se o tipo estiver configurado como um serviço, não será mais necessário adicionar o atributo [FromServices] aos parâmetros do seu método. O trecho de código a seguir ilustra isso.

[Route("[controller]")]
[ApiController]
public class MyDemoController : ControllerBase
{
    public ActionResult Get(IDateTime dateTime) => Ok(dateTime.Now);
}

Typed results nas mínimas APIs

A interface IResult foi adicionada no .NET 6 para representar valores retornados de APIs mínimas que não fazem uso do suporte implícito para serialização JSON do objeto retornado.

Deve-se observar aqui que a classe Result estática é usada para criar vários objetos IResult que representam diferentes tipos de respostas, como definir um código de status de retorno ou redirecionar o usuário para uma nova URL.

No entanto, como os tipos de estrutura retornados desses métodos eram privados, não foi possível verificar o tipo correto de IResult sendo retornado dos métodos de ação durante o teste de unidade.

Com o .NET 7, os tipos de estrutura que implementam a interface IResult agora são públicos. Assim, podemos usar asserções de tipo ao escrever nossos testes de unidade, conforme mostrado no trecho de código abaixo.

[TesteClass()]
public class MinhaDemoApiTests
{
    [TesteMethod()]
    public void MapMinhaDemoApiTeste()
    {
        var resultado = _MyDemoApi.GetAllData();
        Assert.IsInstanceOfType(result, typeof(Ok<MinhaDemoModel[]>));
    }     
}

Você também pode usar tipos de implementação IResult para testar seus manipuladores de rota em APIs mínimas. O trecho de código a seguir ilustra isso.

var resultado = (Ok<MeuModel>)await _MinhaDemoApi.GetAllData()

5- Grupos de roteamento nas APIs mínimas

Com a ASP.NET Core 7, você pode aproveitar o novo método de extensão MapGroup para organizar grupos de pontos de extremidade que compartilham um prefixo comum em suas APIs mínimas.

O método de extensão MapGroup não apenas reduz o código repetitivo, mas também facilita a personalização de grupos inteiros de endpoints.

O trecho de código a seguir mostra como MapGroup pode ser usado.

app.MapGroup("/public/autores")
    .MapAutoresApi()
    .WithTags("Public");

O próximo trecho de código ilustra o método de extensão MapAutoresApi.

public static class MinhaRouteBuilder
{ 
    public static RouteGroupBuilder MapAutoresApi(this RouteGroupBuilder group)
    {
        group.MapGet("/", GetAllAutores);
        group.MapGet("/{id}", GetAutor);
        group.MapPost("/", CreateAutor);
        group.MapPut("/{id}", UpdateAutor);
        group.MapDelete("/{id}", DeleteAutor);
        return group;
    }
}

Com isso temos cinco novos recursos presentes na ASP.NET Core 7.0 para alavancar o seu desenvolvimento web e embora já estejamos na versão 8.0 estes recursos já estão incorporados e podem ser usados.

Para saber de todos os novos recursos consulte : What's new in ASP.NET Core 7.0

E estamos conversados...

"Todavia para nós há um só Deus, o Pai, de quem é tudo e para quem nós vivemos; e um só Senhor, Jesus Cristo, pelo qual são todas as coisas, e nós por ele."
Coríntios 8:6

Referências:


José Carlos Macoratti