Nello scorso script abbiamo introdotto la libreria Asp.Versioning di .NET Foundation, grazie alla quale abbiamo visto come aggiungere il concetto di versione ai nostri endpoint Minimal API.
L'approccio per sfruttare i controller presenta alcune differenze, a iniziare dal package che dobbiamo installare che, a dispetto del nome "Mvc", va utilizzato anche nel caso di un progetto Web API:
dotnet add package Asp.Versioning.Mvc
Questo package introduce alcune convenzioni per il routing che ci saranno utili nella creazione e nel naming dei controller. La registrazione del servizio non cambia, a parte l'aggiunta del metodo AddMvc:
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddAuthorization(); builder.Services.AddControllers(); builder.Services.AddApiVersioning(options => { options.AssumeDefaultVersionWhenUnspecified = true; options.ReportApiVersions = true; }) // attiva il versioning sui controller .AddMvc(); var app = builder.Build(); // altro codice qui .. app.MapControllers(); app.Run(); }
A questo punto, per dimostrare il funzionamento, possiamo creare un primo PeopleController, come il seguente:
namespace VersioningDemo.Controllers.V1 { [Route("[controller]")] [ApiController] [ApiVersion("1.0", Deprecated = true)] public class PeopleController : ControllerBase { [HttpGet] public IEnumerable<Person> Get() { return new List<Person> { new Person(Name: "John Doe", Age: 30), new Person(Name: "Jane Doe", Age: 25) }; } } public record Person(string Name, int Age); }
Come possiamo notare, l'unico accorgimento che abbiamo usato è quello di aggiungere l'attributo ApiVersion che indica che il controller espone la versione 1.0 dei nostri endpoint.
Il flag Deprecated, unitamente all'opzione ReportApiVersions che abbiamo aggiunto in fase di registrazione, fanno sì che la risposta contenga gli header api-deprecated-versions e api-supported-versions, che i client possono sfruttare per avere informazioni sulle versioni disponibili.
Il controller della versione 2.0, può essere creato in maniera del tutto analoga:
namespace VersioningDemo.Controllers.V2 { [Route("[controller]")] [ApiController] [ApiVersion("2.0")] public class People2Controller : ControllerBase { [HttpGet] public IEnumerable<Person> Get() { return new List<Person> { new Person(GivenName: "John", FamilyName: "Doe", Age: 30), new Person(GivenName: "Jane", FamilyName: "Doe", Age: 25) }; } } public record Person(string GivenName, string FamilyName, int Age); }
Una caratteristica interessante è che, sebbene la classe sia denominata People2Controller e il routing sfrutti il controller name, questo controller risponde comunque al path "/people" (invece che people2, come potremmo aspettarci). Questo è possibile perché il package Api.Versioning.Mvc modifica lievemente le naming convention di ASP.NET Core, tralasciando ogni suffisso numerico, in modo da evitare clash sui nomi delle classi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare le collection expression in C#
Miglioramenti nell'accessibilità con Angular CDK
Ottimizzazione dei block template in Angular 17
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Semplificare il deployment di siti statici con Azure Static Web App
Disabilitare automaticamente un workflow di GitHub
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Implementare il throttling in ASP.NET Core
Creare moduli CSS in React
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Eseguire query verso tipi non mappati in Entity Framework Core
Disabilitare automaticamente un workflow di GitHub (parte 2)
I più letti di oggi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Annunciato Silverlight 4 RC e Windows Phone Developer Tools
- Speciale Razor: il nuovo view engine di WebMatrix e ASP.NET MVC
- Speciale Windows Store app: costruire app con WinRT per Windows 8
- Gestire lo stato all'interno di un class component di ReactJS
- Inserimenti bulk su database con la classe SqlBulkCopy di ADO.NET 2.0
- disponibile su MSDN la versione RTM di #VS2013 Update 2! https://aspit.co/auj #msTechEd