c# - 如何为多态性正确配置 swashbuckle
问题描述
从 5.0.0 更新到 5.4.1 后,我无法获得正确的 OpenApi 定义
我们有 5.0.0 版本的自定义多态过滤器,但它们不适用于最新版本。所以我删除了它们并开始使用 GeneratePolymorphicSchemas()。它可以满足我对多态模型的需求,而不仅仅是为它们。我们还有一些其他的抽象类和具体类,我们不需要类型鉴别器。我尝试了不同的配置,但没有任何成功。生成的定义是错误的,或者我在 swagger UI 上收到错误或服务器 503 错误。
链接到示例项目示例项目
这是我的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<SurveyStep>() ?新列表<类型>() {typeof(BoolStep)} : t.Is<SurveyStepResult>() 吗?新列表<类型>() {typeof(BoolStepResult)} : 无效的; 返回类型; } , t => t.Is<ITypeDiscriminator>() 吗?nameof(ITypeDiscriminator.TypeDiscriminator).ToCamelCase() : null); // 或者 options.GeneratePolymorphicSchemas(discriminatorSelector: t => t.Is<ITypeDiscriminator>() ? nameof(ITypeDiscriminator.TypeDiscriminator).ToCamelCase() : null);
解决方案
我自己发现了问题。
扩展方法不过滤抽象类,Is<>
所以我们在这里无限递归。
它帮助我们生成了 swagger.json,但我们遇到了其他问题,这些问题更深一些。
推荐阅读
- css - CSS 样式不适用于 Wordpress 网站
- android - 如何在片段中显示 Toast 小部件?
- google-chrome - SDL 中的平滑滚动
- html - Chrome 中缺少右边框和下边框(全屏模式)
- angular - 如何在 Jasmine/Angular 中模拟服务的事件发射器
- css - 'default'关键字对css变量意味着什么?
- matlab - 训练 ANN 时对样本进行加权
- python - Python列表将特定元素限制为N次
- python - 有没有办法将现有输入链接到 django 表单?
- javascript - 在 respondWith 中使用异步函数