Roadmap › ASP.NET Core Web API & REST › Module: Performance, Versioning and Docs
Lessons in this course (15)
12. API versioning and OpenAPI
Intermediate★ Must knowLesson 12 of 15
csharp
// Asp.Versioning.Http / Asp.Versioning.Mvc packages
builder.Services.AddApiVersioning(o =>
{
o.DefaultApiVersion = new ApiVersion(1, 0);
o.AssumeDefaultVersionWhenUnspecified = true;
o.ReportApiVersions = true; // api-supported-versions header
o.ApiVersionReader = new UrlSegmentApiVersionReader();
});
[ApiVersion("1.0")][ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/orders")]
public class OrdersController : ControllerBase { [HttpGet, MapToApiVersion("2.0")] public IActionResult GetV2() => Ok(); }
// OpenAPI (.NET 9+ built in)
builder.Services.AddOpenApi();
app.MapOpenApi(); // /openapi/v1.json
// UI: Scalar (app.MapScalarApiReference()) or Swashbuckle/NSwag Swagger UIVersioning strategies: URL segment (/v2/orders — most visible), query string (?api-version=2.0), header (api-version: 2), media type (Accept: application/vnd.shop.v2+json). Only make breaking changes in a new major version; additive changes are non-breaking.