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 JSON “Potencia 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: