【问题标题】:Swashbuckle how to add OneOf declaration to OpenAPI 3Swashbuckle 如何将 OneOf 声明添加到 OpenAPI 3
【发布时间】:2020-05-13 18:51:28
【问题描述】:

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

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

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

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

https://datatracker.ietf.org/doc/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" } ]

但是,我希望它的价值看起来更像

oneOf: [ "A", "B" ]

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

【问题讨论】:

  • 不确定您的问题是什么?

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


【解决方案1】:

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

public void ConfigureServices(IServiceCollection services){
     services.AddSwaggerGen(c => {c.UseOneOfForPolymorphism();})
}

其他的可以关注the documentation of OpenAPI 3.0。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多