0

我正在使用 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 核心

4

2 回答 2

2

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


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")
                }
            }
        });
    });

于 2020-12-06T00:02:30.770 回答
0

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

    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 文档。

于 2020-12-03T21:35:31.497 回答