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
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Definire stili a livello di libreria in Angular
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Le novità di Angular: i miglioramenti alla CLI
Usare le collection expression per inizializzare una lista di oggetti in C#
Cancellare una run di un workflow di GitHub
Utilizzare Copilot con Azure Cosmos DB
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Load test di ASP.NET Core con k6
Come migrare da una form non tipizzata a una form tipizzata in Angular
Gestire domini wildcard in Azure Container Apps