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
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Generare un hash con SHA-3 in .NET
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Ottenere un token di accesso per una GitHub App
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Change tracking e composition in Entity Framework
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Sfruttare al massimo i topic space di Event Grid MQTT
Implementare l'infinite scroll con QuickGrid in Blazor Server
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online