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

.NET Core 3.1 C#多API版本场景下Swagger UI端点未正确分离问题

解决方案

该问题由API版本控制组件与Swagger API探索器联动配置缺失、分组过滤逻辑不严谨导致,按以下步骤修改即可解决:

步骤1:安装缺失的NuGet包

项目仅引入了API版本控制的基础包,缺少和Swagger联动的API探索扩展包,通过NuGet安装Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer,注意版本要和当前使用的Microsoft.AspNetCore.Mvc.Versioning包版本一致,.NET Core 3.1项目建议使用3.x版本的包。

步骤2:补充版本探索配置

修改Startup.cs中ConfigureServices方法的API版本控制配置,追加版本探索的相关配置:

services.AddApiVersioning(c =>
{
    c.DefaultApiVersion = new ApiVersion(1, 0);
    c.AssumeDefaultVersionWhenUnspecified = true;
    c.ReportApiVersions = true;
    c.ApiVersionReader = new UrlSegmentApiVersionReader();
})
// 新增以下版本探索配置
.AddVersionedApiExplorer(opt =>
{
    // 分组名格式:v + 版本号,比如v1、v2
    opt.GroupNameFormat = "'v'V";
    // 自动将路由中的版本占位符替换为实际版本号
    opt.SubstituteApiVersionInUrl = true;
});

步骤3:优化Swagger文档过滤逻辑

原有的DocInclusionPredicate仅通过GroupName判断存在识别误差,替换为通过控制器的ApiVersion特性直接匹配版本,修改AddSwaggerGen中的对应配置:

services.AddSwaggerGen(c =>
{
    // 原有SwaggerDoc配置保持不变
    c.SwaggerDoc("v1", new OpenApiInfo { /* 原有配置 */ });
    c.SwaggerDoc("v2", new OpenApiInfo { /* 原有配置 */ });
    
    c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
    // 替换原有DocInclusionPredicate逻辑
    c.DocInclusionPredicate((docName, apiDesc) =>
    {
        if (!apiDesc.TryGetMethodInfo(out var methodInfo)) 
            return false;
        
        // 获取当前接口所属控制器标注的所有版本号
        var apiVersions = methodInfo.DeclaringType
            .GetCustomAttributes(inherit: true)
            .OfType<ApiVersionAttribute>()
            .SelectMany(attr => attr.Versions);
        
        // 匹配文档名称和版本号
        return apiVersions.Any(v => $"v{v.MajorVersion}" == docName);
    });
});

验证方法

修改完成后清理项目重新编译,启动后直接访问/swagger/v2/swagger.json,搜索v1版本的接口路径,确认不存在后再访问UI验证切换效果即可。
如果修改后仍有问题,可在DocInclusionPredicate中打断点,排查接口未被正确过滤的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:09:02