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

C# .NET 5+Swashbuckle环境下如何获取OpenAPI版本并在控制器返回

实现方法

完全可以通过依赖注入的方式拿到目标值,以下是两种可行的实现方案:

方案1:直接注入Swagger生成配置获取(无额外配置)

Swashbuckle组件的生成配置默认已经注入到容器中,你只需要在控制器中注入IOptions<SwaggerGeneratorOptions>即可读取到OpenAPI规范版本:

  1. 先引用所需命名空间
using Swashbuckle.AspNetCore.SwaggerGen;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi;
  1. 调整控制器代码,补全获取逻辑:
[ApiController]
[Route("api/my-app/openapi-version")]
public class OpenApiVersionController: ControllerBase
{
    private readonly IOptions<Configuration> _configuration;
    private readonly IOptions<SwaggerGeneratorOptions> _swaggerGenOptions;

    // 构造函数注入Swagger生成配置
    public OpenApiVersionController(IOptions<Configuration> configuration, IOptions<SwaggerGeneratorOptions> swaggerGenOptions)
    {
        _configuration = configuration;
        _swaggerGenOptions = swaggerGenOptions;
    }

    [HttpGet, Route("")]
    public ActionResult<OpenApiVersion> GetOpenApiVersion()
    {
        // 直接从配置中拿到版本枚举,转为对应字符串即可
        string version = _swaggerGenOptions.Value.OpenApiVersion.GetStringDisplayName();
        return Ok(new OpenApiVersion(version));
    }
}

该方法返回的值和生成的OpenAPI JSON文件中根节点的openapi/swagger字段完全一致。

方案2:复用统一配置(更推荐)

如果你在服务注册时手动指定过OpenAPI版本,建议将版本值统一放到配置文件中,Swagger注册和控制器都读取同一个配置值,避免后续修改Swagger配置时两处不一致:

  1. 在appsettings.json中添加配置项:
{
  "AppSettings": {
    "OpenApiSpecVersion": "3.0.1"
  }
}
  1. 注册Swagger时读取该配置:
// Startup.cs ConfigureServices方法中
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的接口文档", Version = "v1" });
    // 读取配置设置版本
    var specVersion = Configuration.GetValue<string>("AppSettings:OpenApiSpecVersion") == "3.0.1" 
        ? OpenApiSpecVersion.OpenApi3_0 
        : OpenApiSpecVersion.OpenApi2_0;
    c.OpenApiVersion = specVersion;
});
  1. 控制器中直接读取自己的配置即可:
[HttpGet, Route("")]
public ActionResult<OpenApiVersion> GetOpenApiVersion()
{
    string version = _configuration.Value.AppSettings.OpenApiSpecVersion;
    return Ok(new OpenApiVersion(version));
}

注意事项

  • .NET 5配套的Swashbuckle.AspNetCore版本推荐使用5.6.3及以上的5.x版本,避免API不兼容问题
  • 如果你使用的是Swagger 2.0规范,返回值会自动对应为2.0,和生成JSON的swagger字段值匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:12:03