【问题标题】:How to configure swashbuckle correct for polymorphism如何为多态性正确配置 swashbuckle
【发布时间】: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


    【解决方案1】:

    我自己发现了问题。

    Is<> 扩展方法不过滤抽象类,所以我们在这里无限递归。

    它帮助我们生成了 swagger.json,但我们遇到了其他问题,这些问题有点深。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 2012-04-20
      • 2017-04-21
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 2021-09-06
      相关资源
      最近更新 更多