我有一个请求对象,可以是2个字符串类型“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" ]
这可能吗?阅读我的swagger文档的人不会知道OrderedMap的List是什么。
2条答案
按热度按时间vohkndzv1#
在C# .NET Core 5中:为了在
swagger.json
的编译时自动解析oneOf
(多态性),请在Startup.cs
中添加以下行:对于其他所有内容,您可以遵循the documentation of OpenAPI 3.0。
bqujaahr2#
我用SchemaFilter解决这个问题:
我正在使用这个版本的软件包: