Negli scorsi due script abbiamo parlato di API versioning in ASP.NET Core, e imparato a sfruttare la libreria Asp.Versioning di .NET Foundation.
In entrambi i casi, abbiamo sfruttato come selector per la versione un parametro in query string. Tuttavia, in Asp.Versioning possiamo personalizzare questo aspetto, grazie a una serie di provider disponibili che consentono di leggere il numero di versione anche da altre sorgenti, quali un path nell'URL, l'header della richiesta, media type, o persino di scrivere i nostri provider custom.
Immaginiamo allora di voler sfruttare un path nell'URL dell'endpoint per indicare la versione desiderata, per es.
https://localhost:7133/v1/people
Non dobbiamo far altro che specificare il corrispondente version reader in fase di registrazione del servizio:
builder.Services.AddApiVersioning(options => { // default version non è supportato con URL segment versioning // options.AssumeDefaultVersionWhenUnspecified = true; options.ReportApiVersions = true; options.ApiVersionReader = new UrlSegmentApiVersionReader(); }).AddMvc();
Come si evince dal commento, usando UrlSegmentApiVersionReader il numero di versione diventa parte integrante del path, e pertanto il concetto di "versione di default" non è più supportato.
Quando specifichiamo il routing, possiamo poi indicare dove risiederà questo parametro nel path, indicando il tipo apiVersion:
[Route("v{version:apiVersion}/[controller]")] [ApiController] [ApiVersion("2.0")] public class People2Controller : ControllerBase { // .. altro codice qui .. }
Questo formato funziona anche in caso di Minimal API:
myVersionedApi.MapGet("/v{version:apiVersion}/weatherforecast", // ... altro codice qui ... ).HasApiVersion(1.0);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Gestire liste di tipi semplici con Entity Framework Core
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Creare gruppi di client per Event Grid MQTT
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Eseguire una GroupBy per entity in Entity Framework
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Workflow di continuous deployment tramite pull request label in GitHub
Utilizzare i nuovi piani dedicati di Azure Container Apps
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Reactive form tipizzati con modellazione del FormBuilder in Angular