[英]How to configure swashbuckle correct for polymorphism
從 5.0.0 更新到 5.4.1 后,我無法獲得正確的 OpenApi 定義
我們有 5.0.0 版本的自定義多態過濾器,但它們不適用於最新版本。 所以我刪除了它們並開始使用 GeneratePolymorphicSchemas()。 它可以滿足我對多態模型的需求,而不僅僅是為它們。 我們還有一些其他的抽象類和具體類,我們不需要類型鑒別器。 我嘗試了不同的配置,但沒有任何成功。 生成的定義是錯誤的,或者我在 swagger UI 上收到錯誤或服務器 503 錯誤。
鏈接到示例項目示例項目
這是我的polimorhic模型
namespace SwashbuckleTest.Models { public interface ITypeDiscriminator { string TypeDiscriminator { get; } } public abstract class SurveyStep : ITypeDiscriminator { public virtual string Id { get; set; } public string TypeDiscriminator => GetType().Name; } public abstract class SurveyStepResult : ITypeDiscriminator { public string Id { get; set; } public string TypeDiscriminator => GetType().Name; } public class BoolStep : SurveyStep { private string _id; public BoolStep() { ResultObject = new BoolStepResult(); } public override string Id { get => _id; set { _id = value; ResultObject.Id = value; } } public string Question { get; set; } public BoolStepResult ResultObject { get; } } public class BoolStepResult : SurveyStepResult { public bool Value { get; set; } } }
這里其他型號
namespace SwashbuckleTest.Models { public abstract class SomeBaseModel { public string BaseValue { get; set; } } public class SomeConcreteModel : SomeBaseModel { public int ConcreteValue { get; set; } } }
和我嘗試過的配置
options.UseAllOfToExtendReferenceSchemas(); options.GeneratePolymorphicSchemas(t => { var types = t.Is<SurveyStep>() ? new List<Type>() {typeof(BoolStep)} : t.Is<SurveyStepResult>() ? new List<Type>() {typeof(BoolStepResult)} : null; return types; } , t => t.Is<ITypeDiscriminator>() ? nameof(ITypeDiscriminator.TypeDiscriminator).ToCamelCase() : null); // or options.GeneratePolymorphicSchemas(discriminatorSelector: t => t.Is<ITypeDiscriminator>() ? nameof(ITypeDiscriminator.TypeDiscriminator).ToCamelCase() : null);
我自己發現了問題。
Is<>
擴展方法不過濾抽象類,所以我們在這里無限遞歸。
它幫助我們生成了 swagger.json,但我們遇到了其他問題,這些問題有點深。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.