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

如何优雅地从builder.Configuration加载Swagger配置对象?

优化.NET Core多Swagger端点配置方案

核心目标

将6个Swagger端点的Contact、License等元数据从Program.cs硬编码迁移至appsettings.json,简化臃肿的配置代码,同时保留多端点独立的需求。


步骤1:在appsettings.json中定义多端点配置

添加统一配置节点,集中管理所有端点的元数据:

"SwaggerEndpoints": [
  {
    "Name": "service1",
    "Title": "服务1 API文档",
    "Version": "v1",
    "Contact": {
      "Name": "服务1联系人",
      "Email": "service1@example.com",
      "Url": "https://example.com/service1"
    },
    "License": {
      "Name": "MIT许可证",
      "Url": "https://opensource.org/licenses/MIT"
    }
  },
  {
    "Name": "service2",
    "Title": "服务2 API文档",
    "Version": "v1",
    "Contact": {
      "Name": "服务2联系人",
      "Email": "service2@example.com",
      "Url": "https://example.com/service2"
    },
    "License": {
      "Name": "Apache 2.0许可证",
      "Url": "https://www.apache.org/licenses/LICENSE-2.0"
    }
  }
  // 其余4个服务配置按相同格式添加
]

步骤2:创建强类型配置模型

复用Swashbuckle内置的OpenApiContact和OpenApiLicense类,创建与配置结构匹配的模型:

public class SwaggerEndpointSettings
{
    public string Name { get; set; }
    public string Title { get; set; }
    public string Version { get; set; }
    public OpenApiContact Contact { get; set; }
    public OpenApiLicense License { get; set; }
}

步骤3:在Program.cs中批量加载配置

通过.NET配置绑定读取所有端点信息,循环生成Swagger文档配置,彻底消除重复硬编码:

// 读取配置数组
var swaggerEndpoints = builder.Configuration.GetSection("SwaggerEndpoints")
    .Get<List<SwaggerEndpointSettings>>();

// 配置Swagger
builder.Services.AddSwaggerGen(options =>
{
    if (swaggerEndpoints != null)
    {
        foreach (var endpoint in swaggerEndpoints)
        {
            options.SwaggerDoc(endpoint.Name, new OpenApiInfo
            {
                Title = endpoint.Title,
                Version = endpoint.Version,
                Contact = endpoint.Contact,
                License = endpoint.License
                // 可按需扩展Description、TermsOfService等字段,只需在配置文件中对应添加
            });
        }
    }

    // 保留原有Swagger其他配置(如注释读取、安全方案定义等)
});

方案优势

  • 配置集中化:所有端点元数据统一在appsettings.json管理,修改无需改动代码
  • 代码简洁化:仅需循环逻辑即可完成所有端点配置,避免大量重复的SwaggerDoc硬编码
  • 类型安全:强类型绑定避免手动读取配置的繁琐,同时保证配置数据的正确性

内容的提问来源于stack exchange,提问作者Wim ten Brink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:18:27