Minimal API è una nuova funzionalità di ASP.NET Core introdotta con .NET 6, che consente di creare un servizio web minimizzando le dipendenze e le dimensioni della nostra applicazione - idealmente, la sola classe Program!
Per creare un progetto di questo tipo, da Visual Studio 2022 è sufficiente deselezionare la checkbox "Use controllers" nel wizard di setup:
Se stiamo usando DotNet CLI, invece, dobbiamo specificare l'opzione minimal:
dotnet new webapi -minimal
A questo punto, ci troveremo un progetto che, come accennato, contiene solo il file Program.cs, il cui codice è grossomodo simile al seguente:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; app.MapGet("/weatherforecast", () => { var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateTime.Now.AddDays(index), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); return forecast; }); app.Run();
Il codice è piuttosto esplicativo, e l'unico endpoint in GET disponibile è dichiarato tramite il metodo MapGet, specificandone il path e la relativa logica tramite una lambda. In maniera del tutto analoga, possiamo usare MapPost, MapPut e MapDelete per dichiarare endpoint con differenti verbi HTTP.
Se abbiamo bisogno di parametri, dobbiamo indicarli nel routing e poi specificarli nella lambda stessa:
app.MapGet("/people/{id}", (int id) => { if (id == 0) return Results.NotFound(); return Results.Json(new Person { Name = "Marco" }); });
Nell'esempio in alto, abbiamo anche sfruttato la classe statica Results per restituire NotFound o un oggetto Json a seconda del valore di Id in input.
Nel caso di una POST, invece, il primo parametro della lambda rappresenta il contenuto del body della richiesta:
app.MapPost("/people", (Person person) => { // save the person // ... return Results.Accepted; });
Sebbene Minimal API abbiano alcune limitazioni rispetto ai normali controller (per esempio non supportano i Filter, o il ModelBinding), rappresentano comunque un modo veloce e conciso per creare microservizi senza troppo codice boilerplate.
Nei prossimi script torneremo su questo argomento, e parleremo di altri concetti importanti, come il supporto per la security o per la dependency injection.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Installare le Web App site extension tramite una pipeline di Azure DevOps
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Evitare la script injection nelle GitHub Actions
Creare alias per tipi generici e tuple in C#
Eseguire query verso tipi non mappati in Entity Framework Core
Migliorare l'organizzazione delle risorse con Azure Policy
Effettuare il refresh dei dati di una QuickGrid di Blazor
Gestire domini wildcard in Azure Container Apps
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Eseguire i worklow di GitHub su runner potenziati
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core