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:
![](https://www.aspitalia.com/script/images/1413.jpg)
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
Usare una container image come runner di GitHub Actions
Creare una custom property in GitHub
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Ottimizzazione dei block template in Angular 17
Miglioramenti nell'accessibilità con Angular CDK
Gestire domini wildcard in Azure Container Apps
Cancellare una run di un workflow di GitHub
Utilizzare Model as a Service su Microsoft Azure
Eseguire le GitHub Actions offline
Utilizzare i primary constructor in C#