ASP.NET Core 6 - Usando os novos recursos das expressões lambdas


Hoje vou apresentar os novos recursos do lambda disponíveis no C# 10 usados em um projeto Minimal API da ASP .NET Core 6.

A linguagem C# continua avançando a passos largos e na versão 10 temos muitas novidades. Agora os atributos podem ser adicionados às expressões lambda e aos parâmetros lambda.

Para evitar ambigüidade entre atributos de método e atributos de parâmetro, uma expressão lambda com atributos deve usar uma lista de parâmetros entre parênteses. Os tipos de parâmetro não são obrigatórios.

O compilador terá melhor suporte para inferir assinaturas lambda e também será possível adicionar atributos. Será possível especificar tipos de retorno explícitos para ajudar o compilador a entender o lambda.

Assim os novos recursos das expressões lambdas no C# 10 agora permitem:

Isso resolve muitos problemas que ocorriam caso você quisesse usar lambdas para definir manipuladores para endpoints em uma API HTTP.

Para mostrar o uso deste novo recurso vamos criar uma Minimal API usando o template ASP .NET Core Empty no Visual Studio 2022 :

A seguir vamos informar o nome do projeto :  ApiMin1

Selecionar o Framework .NET 6.0 (que atualmente esta em RC1) e clicar em Create :

Pronto!

Abrindo o arquivo Program teremos o código abaixo gerado por padrão :

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();

Vamos alterar este código e usar os novos recursos das expressões lambdas.

Vamos simplificar ainda mais o código e definir um endpoint GET usando o método de extensão auxiliares MapGet conforme mostrado a seguir:

var a = WebApplication.Create(args);

a.MapGet("Potencia/{numero}", (int numero) => Results.Ok($"Potência de dois de  {numero} é : {numero * numero}."));

a.Run();

Neste código:

Registramos um único manipulador GET de endpoint, para a rota /Potencia/{numero}.

Por causa das melhorias nos lambdas  podemos usá-los para processar a solicitação, e como agora temos suporte para o model binding , o número é extraído pelo framework da rota e é fornecido ao nosso manipulador conforme o esperado.

Se invocarmos este endpoint em, por exemplo /Potencia/11, ele retornará uma string JSONPotencia de dois de 11 é : 121.”.

O novo conjunto de helpers em torno da classe  Result traz recursos conhecidos do MVC para as APIs mínimas. Ele é construído sobre IResult, que pode ser usada para definir um contrato que representa o resultado do endpoint  HTTP e agora é parte integrante das abstrações HTTP da ASP.NET, em Microsoft.AspNetCore.Http.

Além disso, se este endpoint for chamado com um parâmetro de rota não inteiro, por exemplo /Potencia/aa, o framework emitirá automaticamente uma resposta 400 Bad Request, sem envolver nosso manipulador.

O objetivo final é permitir o uso de lambdas e, ao mesmo tempo, ter paridade quando se trata de usar atributos e outros recursos disponíveis para aplicativos ASP.NET construídos com controladores.

Temos assim um exemplo dos novos recursos das expressões lambdas em ação em uma aplicação ASP .NET Core.

E estamos conversados.

"Bendito o Deus e Pai de nosso Senhor Jesus Cristo, o qual nos abençoou com todas as bênçãos espirituais nos lugares celestiais em Cristo;  Como também nos elegeu nele antes da fundação do mundo, para que fôssemos santos e irrepreensíveis diante dele em amor;"
Efésios 1:3,4

Referências:


José Carlos Macoratti