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();
|
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:
NET - Unit of Work - Padrão Unidade de ...