【发布时间】:2020-10-09 12:24:41
【问题描述】:
在从 5.0.0 更新到 5.4.1 后,我无法获得正确的 OpenApi 定义
我们有 5.0.0 版本的自定义多态过滤器,但它们不适用于最新版本。所以我删除了它们并开始使用 GeneratePolymorphicSchemas()。它可以满足我对多态模型的需求,而不仅仅是它们。我们还有一些其他的抽象类和具体类,我们不需要类型鉴别器。我尝试了不同的配置,但没有任何成功。生成的定义是错误的,或者我在 swagger UI 上收到错误或服务器 503 错误。
链接到示例项目Sample project
这是我的polimorhic模型
命名空间 SwashbuckleTest.Models
{
公共接口 ITypeDiscriminator
{
字符串类型鉴别器 { 得到; }
}
公共抽象类 SurveyStep : ITypeDiscriminator
{
公共虚拟字符串 ID { 获取;放; }
公共字符串 TypeDiscriminator => GetType().Name;
}
公共抽象类 SurveyStepResult : ITypeDiscriminator
{
公共字符串 ID { 获取;放; }
公共字符串 TypeDiscriminator => GetType().Name;
}
公共类 BoolStep : SurveyStep
{
私有字符串_id;
公共布尔步骤()
{
ResultObject = new BoolStepResult();
}
公共覆盖字符串 ID
{
得到 => _id;
放
{
_id = 值;
ResultObject.Id = 值;
}
}
公共字符串问题{获取;放; }
公共 BoolStepResult 结果对象 { 获取; }
}
公共类 BoolStepResult : SurveyStepResult
{
公共布尔值 { 得到;放; }
}
}
这里有其他型号
命名空间 SwashbuckleTest.Models
{
公共抽象类 SomeBaseModel
{
公共字符串 BaseValue { 获取;放; }
}
公共类 SomeConcreteModel : SomeBaseModel
{
公共 int ConcreteValue { 获取;放; }
}
}
以及我尝试过的配置
options.UseAllOfToExtendReferenceSchemas();
options.GeneratePolymorphicSchemas(t =>
{
var types = t.Is() ?新列表() {typeof(BoolStep)}
: t.Is() 吗?新列表() {typeof(BoolStepResult)}
: 空值;
返回类型;
} , t => t.Is() 吗? nameof(ITypeDiscriminator.TypeDiscriminator).ToCamelCase() : null);
// 要么
options.GeneratePolymorphicSchemas(discriminatorSelector: t => t.Is() ? nameof(ITypeDiscriminator.TypeDiscriminator).ToCamelCase() : null);
【问题讨论】:
标签: c# polymorphism openapi swashbuckle