.net-core - Swashbuckle 如何将 OneOf 声明添加到 OpenAPI 3

标签 .net-core swagger swagger-ui openapi swashbuckle

我有一个请求对象,它可以是 2 个字符串类型“A”或“B”。

注意:这是我真正想要的一个更简单的例子。枚举在这里对我不起作用。

public class SampleRequest
    {
        //Can only be "A" or "B"
        public string Property1 { get; set; }
    }

我正在尝试创建一个可以作为 OpenAPI“OneOf”属性输出的模式过滤器。

https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.5

https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/#oneof

https://github.com/domaindrivendev/Swashbuckle.AspNetCore#schema-filters

public class CustomSchemaFilter : ISchemaFilter
    {
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {

            schema.OneOf = new List<OpenApiSchema>
            {

                new OpenApiSchema {Type = "string", Description = "A"},
                new OpenApiSchema {Type = "string", Description = "B"}
            };

        }
    }

运行 swagger 时,swagger-ui 正确呈现“oneOf”描述:
oneOf: List [ OrderedMap { "type": "string", "description": "A" }, OrderedMap { "type": "string", "description": "B" } ]

然而,我期待它的值(value)看起来更像
oneOf: [ "A", "B" ]

这可能吗?阅读我的 swagger 文档的人不会知道 OrderedMap 列表是什么。

最佳答案

在 C# .NET Core 5 中:为了自动解析 oneOf (多态)在编译时为您的 swagger.json , 在您的 Startup.cs 中添加以下行:

public void ConfigureServices(IServiceCollection services){
     services.AddSwaggerGen(c => {c.UseOneOfForPolymorphism();})
}
对于其他一切,您可以关注 the documentation of OpenAPI 3.0 .

关于.net-core - Swashbuckle 如何将 OneOf 声明添加到 OpenAPI 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61782580/

相关文章:

.net-core - 为什么在 Entity Framework Core 中使用 FindAsync 时会出现空引用异常?

entity-framework - IdentityServer4 错误 : No DbContext named 'ConfigurationDbContext' was found

java - 将 Swagger 2.0 可重用参数与 springfox 结合使用

添加 swagger-play2 依赖项后 Scala Play 项目构建失败 - sbt 找不到播放?

Azure API应用程序代理生成错误

asp.net-mvc - Swagger 仅适用于 apicontroller,而不适用于 mvc Controller ?

node.js - Swagger-ui 不断显示示例 petstore,而不是提供的 swagger.json

linux - 尝试在 Ubuntu 上运行 .net Core HelloWorld 控制台应用程序

.net-core - Stryker.NET 从项目的根目录支持 SLN 文件

swagger - 如何在 nestjs 中禁用用于生产的 swagger