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 UI

Versioning 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.