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

ASP.NET Core中用Swashbuckle能否同时暴露Swagger2.0和OpenAPI3格式的JSON?

实现方案

可以实现,只需分别配置两个独立的Swagger中间件实例,分别指定序列化规则和路由模板即可,具体操作如下:

步骤1:服务注册(Program.cs/Startup.cs ConfigureServices 段)

builder.Services.AddSwaggerGen(options =>
{
    // 只需注册一次API文档信息即可
    options.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
    {
        Title = "你的API服务名称",
        Version = "v1"
    });
    // 其余原有SwaggerGen配置(如注释导入、鉴权配置等)保持不变
});

步骤2:中间件配置(Program.cs/Startup.cs Configure 段)

不要使用默认的无参UseSwagger()调用,改为分别两次调用UseSwagger,单独配置各自的规则:

// 配置OpenAPI 3.x格式的暴露端点
app.UseSwagger(options =>
{
    options.RouteTemplate = "swagger/{documentName}/openapi/swagger.json";
    options.SerializeAsV2 = false;
});

// 配置Swagger 2.0格式的暴露端点
app.UseSwagger(options =>
{
    options.RouteTemplate = "swagger/{documentName}/swagger2/swagger.json";
    options.SerializeAsV2 = true;
});

// 后续UseSwaggerUI等其余原有配置保持不变

效果验证

配置完成后:

  • 访问 /swagger/v1/openapi/swagger.json 返回 OpenAPI 3.x 格式的API文档
  • 访问 /swagger/v1/swagger2/swagger.json 返回 Swagger 2.0 格式的API文档

两份文档的API数据完全一致,仅输出格式不同,可同时满足遗留系统适配和新场景的标准要求。

注意事项

  • 两次UseSwagger的调用顺序无特殊要求,只要路由模板不冲突即可正常生效
  • 若存在多版本API,无需额外修改配置,路径中的{documentName}参数会自动匹配已注册的所有版本号,生成对应版本的两种格式文档

内容的提问来源于stack exchange,提问作者Dmitry S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:03:00