You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:15:38