From 6ff01a803c26e1dd3d47eb718ed22dd6538deb89 Mon Sep 17 00:00:00 2001 From: dmolinari Date: Sat, 7 Mar 2026 19:05:10 -0300 Subject: [PATCH] feat: implementar versionado de API por URL v1. Closes #3 --- .../ApiVersioningDemo.Api.csproj | 2 ++ .../Controllers/WeatherForecastController.cs | 5 +++- ApiVersioningDemo.Api/Program.cs | 23 ++++++++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/ApiVersioningDemo.Api/ApiVersioningDemo.Api.csproj b/ApiVersioningDemo.Api/ApiVersioningDemo.Api.csproj index d1cee09..d678ca6 100644 --- a/ApiVersioningDemo.Api/ApiVersioningDemo.Api.csproj +++ b/ApiVersioningDemo.Api/ApiVersioningDemo.Api.csproj @@ -7,6 +7,8 @@ + + diff --git a/ApiVersioningDemo.Api/Controllers/WeatherForecastController.cs b/ApiVersioningDemo.Api/Controllers/WeatherForecastController.cs index eda7730..5d1bdd2 100644 --- a/ApiVersioningDemo.Api/Controllers/WeatherForecastController.cs +++ b/ApiVersioningDemo.Api/Controllers/WeatherForecastController.cs @@ -1,9 +1,12 @@ +// ApiVersioningDemo.Api/Controllers/WeatherForecastController.cs +using Asp.Versioning; using Microsoft.AspNetCore.Mvc; namespace ApiVersioningDemo.Api.Controllers; [ApiController] -[Route("[controller]")] +[ApiVersion("1.0")] // 1. Le decimos explícitamente que este es el controlador de la v1 +[Route("api/v{version:apiVersion}/[controller]")] // 2. Modificamos la ruta para obligar a usar "api/v1/..." public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = diff --git a/ApiVersioningDemo.Api/Program.cs b/ApiVersioningDemo.Api/Program.cs index 666a9c5..2f59fd7 100644 --- a/ApiVersioningDemo.Api/Program.cs +++ b/ApiVersioningDemo.Api/Program.cs @@ -1,7 +1,28 @@ +// ApiVersioningDemo.api/Program.cs +using Asp.Versioning; + var builder = WebApplication.CreateBuilder(args); -// Add services to the container. +// CONFIGURACIÓN DE VERSIONADO +builder.Services.AddApiVersioning(options => +{ + // Si el cliente no especifica versión, usaremos la 1.0 por defecto + options.DefaultApiVersion = new ApiVersion(1, 0); + options.AssumeDefaultVersionWhenUnspecified = true; + // Esto añade una cabecera HTTP en las respuestas diciendo qué versiones existen (ej: api-supported-versions: 1.0, 2.0) + options.ReportApiVersions = true; +}) +.AddMvc() // Integra el versionado con los Controladores +.AddApiExplorer(options => +{ + // Configura el formato para Swagger (ej: "v1", "v2") + options.GroupNameFormat = "'v'VVV"; + options.SubstituteApiVersionInUrl = true; +}); + + +// Add services to the container. builder.Services.AddControllers(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi();