ASP.NET API如何实现自动匹配不高于客户端版本的最近可用接口
解决方案
你需要的功能由微软官方维护的NuGet包Microsoft.AspNetCore.Mvc.Versioning原生支持,无需自行实现路由逻辑。
操作步骤
安装对应NuGet包
如果你是ASP.NET Core应用,直接安装最新稳定版的Microsoft.AspNetCore.Mvc.Versioning即可,如果需要配合Swagger生成多版本文档,可额外安装Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer。配置版本控制策略
在Program.cs中添加如下配置(.NET 6+顶层语句写法,旧版本写法对应修改Startup.cs的ConfigureServices方法即可):
builder.Services.AddApiVersioning(options => { // 配置默认版本,无匹配时的兜底版本 options.DefaultApiVersion = new ApiVersion(1, 0); // 响应头返回接口支持的所有版本,可按需开启 options.ReportApiVersions = true; // 核心配置:使用最高匹配版本选择器,自动选择不高于请求版本的最近可用接口版本 options.ApiVersionSelector = new HighestMatchingApiVersionSelector(options); // 你用的是URL路径传递版本号,指定版本读取器为URL段模式 options.ApiVersionReader = new UrlSegmentApiVersionReader(); }) // 启用MVC集成 .AddMvc() // 按需添加,用于Swagger多版本适配 .AddApiExplorer(options => { options.GroupNameFormat = "'v'VVV"; options.SubstituteApiVersionInUrl = true; });
- 原有代码无需调整
你现有接口的[ApiVersion]、[Route]标注完全符合要求,不用做任何修改。
效果验证
配置完成后:
- 请求
/api/v1.0/GetHeartBeat返回1.0版本结果 - 请求
/api/v1.3/GetHeartBeat自动匹配到可用的最高版本1.0,返回对应结果 - 请求
/api/v1.5/GetHeartBeat返回1.5版本结果 - 请求高于1.5的版本时,自动匹配1.5版本接口
该方案完全符合你的需求,不需要复制整个控制器,也不需要给未修改的接口新增版本标注,仅需要给迭代修改的接口新增对应版本的标注即可。
内容的提问来源于stack exchange,提问作者tmwoods
相关产品推荐
相关产品推荐

