使用 Swashbuckle 时将全局项目添加到 swagger.json
Add global item to swagger.json when using Swashbuckle
我正在使用 Swashbuckle 生成一个 swagger 文件,然后将其上传到 Google 个端点。
Google 端点需要这两个参数(主机和 x-google-后端)
"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 核心
我认为您可以通过创建如下所示的操作过滤器来实现此目的:
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 文档。
在这种情况下你可以直接在Startup.cs
中添加到Extensions
变量中SwaggerDoc
。
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")
}
}
});
});
我正在使用 Swashbuckle 生成一个 swagger 文件,然后将其上传到 Google 个端点。
Google 端点需要这两个参数(主机和 x-google-后端)
"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 核心
我认为您可以通过创建如下所示的操作过滤器来实现此目的:
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 文档。
在这种情况下你可以直接在Startup.cs
中添加到Extensions
变量中SwaggerDoc
。
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")
}
}
});
});