app.MapGet("/api/demo", () => "Hello MyIO");在上面的代码中,我们定义了一个 GET 请求的路由,该路由为 /api/demo。要为该路由添加版本支持,我们首先需要引用 Nuget 包 Asp.Versioning.Http,并在 Program.cs 文件中添加以下代码,以启用 API 版本控制:
builder.Services.AddApiVersioning(options => { options.ApiVersionReader = new UrlSegmentApiVersionReader(); });然后,我们需要创建一个版本集,告诉 API 版本控制系统哪些版本可供使用:
var versionSet = app.NewApiVersionSet() .HasApiVersion(1.0) .HasApiVersion(2.0) .ReportApiVersions() .Build();最后,我们需要修改路由,以便为每个版本定义一个路由,例如:
app.MapGet("/api/v{version:apiVersion}/demo", () => "Hello MyIO 1.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(1, 0)); app.MapGet("/api/v{version:apiVersion}/demo", () => "Hello MyIO 2.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(2, 0));在上面的代码中, {version:apiVersion} 是一个占位符,它表示 API 的版本,例如 /api/v1/demo 和 /api/v2/demo。
builder.Services.AddApiVersioning(options => { // 堆代码 duidaima.com options.ApiVersionReader = new QueryStringApiVersionReader("version"); });然后,去掉路由中的版本信息:
app.MapGet("/api/demo", () => "Hello MyIO 1.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(1, 0)); app.MapGet("/api/demo", () => "Hello MyIO 2.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(2, 0));Postman 测试一下:
builder.Services.AddApiVersioning(options => { options.ApiVersionReader = new HeaderApiVersionReader("api-version"); });Postman 测试一下: