如何将AspNetCore API版本控制设置为三位版本号(1.0.0)而非两位(1.0)
如何将Microsoft.AspNetCore.Mvc.Versioning的API版本从两位(1.0)改为三位(1.0.0)
1. 更新控制器的API版本标记
将控制器上的[ApiVersion]特性从两位格式替换为三位格式,示例如下:
// 旧写法 [ApiVersion("1.0")] // 新写法 [ApiVersion("1.0.0")]
如果需要兼容移动端的旧版请求,可以同时保留两个版本标记,后续通过配置实现版本映射。
2. 配置ApiVersioning服务支持三位版本
在Program.cs(.NET 6+)或Startup.cs(.NET 5及更早)中,调整AddApiVersioning的配置选项,确保组件能正确解析和格式化三位版本号:
builder.Services.AddApiVersioning(options => { // 根据你的实际版本传递方式选择读取器,示例为URL段方式 options.ApiVersionReader = new UrlSegmentApiVersionReader(); // 使用语义化版本格式化器,支持三位版本的解析与输出 options.ApiVersionFormatter = new SemanticVersionFormatter(); // 可选:实现两位版本到三位版本的自动映射,兼容旧请求 options.Conventions.ConvertVersionToString = apiVersion => apiVersion.ToString(apiVersion.MajorVersion, apiVersion.MinorVersion, apiVersion.PatchVersion ?? 0); // 设置默认版本为三位格式 options.AssumeDefaultVersionWhenUnspecified = true; options.DefaultApiVersion = new ApiVersion(1, 0, 0); });
如果版本是通过Header或Query参数传递,只需替换ApiVersionReader为对应实现即可,比如HeaderApiVersionReader("api-version")或QueryStringApiVersionReader("api-version")。
3. 验证路由模板(URL段版本控制场景)
如果使用URL段传递版本,路由模板无需额外修改,{version:apiVersion}约束会自动适配三位格式:
[Route("api/v{version:apiVersion}/[controller]")] public class SampleController : ControllerBase { // 接口逻辑 }
4. 测试版本兼容性
- 测试三位版本请求(如
GET /api/v1.0.0/sample),确认能正确路由到目标控制器。 - 若配置了版本映射,测试两位版本请求(如
GET /api/v1.0/sample),验证是否能自动映射到三位版本的接口。
内容的提问来源于stack exchange,提问作者Jova Eli
相关产品推荐
相关产品推荐

