【问题标题】:Add global item to swagger.json when using Swashbuckle使用 Swashbuckle 时将全局项添加到 swagger.json
【发布时间】:2020-12-03 21:22:05
【问题描述】:

我正在使用 Swashbuckle 生成一个 swagger 文件,然后我将其上传到 Google Endpoints。

Google Endpoints 需要这两个参数(host 和 x-google-backend)

"host": "XXXX-ax7nuhuyua-uc.a.run.app",
"x-google-backend": {
    "address": "https://YYYY-dev-ax7nuhuyua-uc.a.run.app",
    "protocol": "h2"
},

这些需要和swagger、info、paths在同一级别添加

谁能告诉我如何扩展 Swashbuckle 生成的 swagger 文件以包含这些全局参数?

使用 ASPNET 核心

【问题讨论】:

    标签: asp.net-core swashbuckle


    【解决方案1】:

    在这种情况下,您可以直接在Startup.cs 中的SwaggerDoc 中添加Extensions 变量。

    
    services
        .AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                // Any other properties
    
                Extensions = new Dictionary<string, IOpenApiExtension>
                {
                    {
                        "x-google-backend", new OpenApiObject
                        {
                            {"address", new OpenApiString("https://YYYY-dev-ax7nuhuyua-uc.a.run.app")},
                            {"protocol", new OpenApiString("h2")}
                        }
                    },
                    {
                        "host", new OpenApiString("XXXX-ax7nuhuyua-uc.a.run.app")
                    }
                }
            });
        });
    
    

    【讨论】:

    • 就是这样 .. 谢谢,我不熟悉“扩展”这个概念。
    【解决方案2】:

    我认为您可以通过创建如下操作过滤器来实现此目的:

        public class AddParameterOperationFilter : IOperationFilter
        {
            public void Apply(OpenApiOperation operation, OperationFilterContext context)
            {
                // add your parameters here
                operation.Parameters.Add(new OpenApiParameter());
            }
        }
    

    在您的 Startup.cs 中,您可以使用以下命令将此过滤器添加到 swagger DI 管道:

    services.AddSwaggerGen(options =>
    {
      options.OperationFilter<AddParameterOperationFilter>();
    });
    
    

    免责声明:我没有针对这个特定问题尝试过这个,但我使用了操作过滤器来自定义 swagger 文档。

    【讨论】:

    • mm .. 也许我在这里遗漏了一些东西,但如果我想为每个方法/操作添加一个参数,这似乎是正确的做法。对于我公开的每个方法,都会调用此 Apply 方法,而上下文就是方法本身。 IDocumentFilter 看起来更像我想要的,但我不太清楚如何使用它来添加这些新闻全局项。
    • 抱歉,我以为这就是您要找的东西。我的坏
    猜你喜欢
    • 2019-05-16
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多