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
Testare l'invio dei messaggi con Event Hubs Data Explorer
Gestire la cancellazione di una richiesta in streaming da Blazor
Simulare Azure Cosmos DB in locale con Docker
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Utilizzare gRPC su App Service di Azure
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Path addizionali per gli asset in ASP.NET Core MVC
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Utilizzare l nesting nativo dei CSS
Utilizzare i primary constructor di C# per inizializzare le proprietà
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow