Program.cs代码内容,需要Nuget安装多个类库
dotnet add package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer //这个会提示已弃用,实际上都在用,
dotnet add package Swashbuckle.AspNetCore.Annotations
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using System.Reflection;var builder = WebApplication.CreateBuilder(args);
// 添加控制器服务.
builder.Services.AddControllers();
// ========== API 版本控制配置 ==========
builder.Services.AddApiVersioning(options =>
{
options.DefaultApiVersion = new ApiVersion(1, 0);
options.AssumeDefaultVersionWhenUnspecified = true;
options.ReportApiVersions = true;
});
builder.Services.AddVersionedApiExplorer();
// ✅ 通过 Configure 配置 ApiExplorer 的选项
builder.Services.Configure<ApiExplorerOptions>(options =>
{
options.GroupNameFormat = "'v'VVV"; // 例如 v1, v2
options.SubstituteApiVersionInUrl = true; // 允许在 URL 中使用 {version}
});// 添加 Swagger 服务.
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{// 获取所有 API 版本信息
var provider = builder.Services.BuildServiceProvider()
.GetRequiredService<IApiVersionDescriptionProvider>();foreach (var description in provider.ApiVersionDescriptions)
{
c.SwaggerDoc(
description.GroupName, // 如 "v1", "v2"
new Microsoft.OpenApi.Models.OpenApiInfo
{
Title = $"API 版本 {description.ApiVersion}",
Version = description.ApiVersion.ToString()
});
}c.EnableAnnotations();
// 加载当前程序集的 XML 文档(即你的 /// 注释)
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
if (File.Exists(xmlPath))
{
c.IncludeXmlComments(xmlPath);
}
});var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(options =>
{
var provider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>();
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint(
$"/swagger/{description.GroupName}/swagger.json",
$"{description.GroupName.ToUpper()} 版本");
}
});
}
// Configure the HTTP request pipeline.app.UseAuthorization();
app.MapControllers();
app.Run();
测试版本切换功能配合代码
OneController.cs中
// v1 版本的控制器
[ApiController]
[ApiVersion("1.0")] // 声明支持 v1.0
[Route("api/v{version:apiVersion}/[controller]")] // 路由中包含版本号
public class OneController:ControllerBase
{
/// <summary>
/// 版本1的测试
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Get()
{
return Ok(new { Message = "这是 API V1", Time = DateTime.Now });
}}
OneControllerV2.cs中
[ApiController]
[ApiVersion("2.0")] // 声明支持 v2.0
[Route("api/v{version:apiVersion}/[controller]")] // 路由中包含版本号
public class OneControllerV2:ControllerBase
{
/// <summary>
/// 版本2的测试
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Get()
{
return Ok(new { Message = "这是 API V2.0 的测试", Time = DateTime.Now });
}
}
运行起来访问/swagger/index.html
注意右上角下来菜单中的版本
版权所有:有信心——uxinxin 我的个人网站欢迎常来!手机版(新站开启,请多多关照) 豫ICP备12017930号-1
豫公网安备41910102000493号