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

.NET 8 API路由版本化:Swagger UI未显示完整v1.0版本串

解决.NET 8 API路由版本化Swagger UI显示版本号简化问题

问题根源

Asp.Versioning默认会将ApiVersion(1, 0)这类版本号简化为1,而非完整的1.0,导致Swagger UI生成的路径显示为/v1/xxx,而非预期的/v1.0/xxx。

配置层面解决方案

无需自定义IDocumentFilter,只需在服务配置阶段调整ApiVersioning和ApiExplorer的版本格式设置:

1. 调整ApiVersioning的版本格式化规则

在Program.cs中配置AddApiVersioning时,指定版本的字符串格式,强制保留完整的主副版本号:

builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    // 配置版本格式,V代表主版本号,v代表副版本号,格式为"V.v"
    options.ApiVersionFormatter = new ApiVersionFormatter
    {
        Format = "V.v"
    };
})

2. 同步ApiExplorer的分组格式

紧接着配置AddApiExplorer时,设置分组名称格式与上面保持一致,确保Swagger能正确读取完整版本号:

.AddApiExplorer(options =>
{
    options.GroupNameFormat = "'v'V.v";
    options.SubstituteApiVersionInUrl = true;
});

3. 验证Swagger文档生成配置

确保SwaggerGen基于ApiExplorer的分组生成文档时,版本号使用完整格式:

builder.Services.AddSwaggerGen(options =>
{
    var apiVersionDescriptionProvider = builder.Services.BuildServiceProvider()
        .GetRequiredService<IApiVersionDescriptionProvider>();

    foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions)
    {
        options.SwaggerDoc(description.GroupName, new OpenApiInfo
        {
            Title = "你的API名称",
            Version = description.ApiVersion.ToString()
        });
    }
});

效果验证

重新启动API后,Swagger UI中选择v1.0版本时,端点路径会正确显示为/v1.0/temporal/timezones,同时实际访问路径不受影响,仍能正常响应请求。

内容的提问来源于stack exchange,提问作者onefootswill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:22:39