У меня проблема с получением правильного определения OpenApi после обновления с 5.0.0 до 5.4.1
У нас был собственный фильтр полиморфизма с версией 5.0.0, но они не работают правильно с последней версией. Поэтому я удалил их и начал использовать GeneratePolymorphicSchemas (). Он делает то, что мне нужно для наших моделей polymorphi c, но не только для них. У нас также есть некоторые другие абстрактные и конкретные классы, в которых нам не нужен дискриминатор типов. Я пробовал разные конфигурации, но безуспешно. Либо сгенерированное определение неверно, либо я получаю ошибку в пользовательском интерфейсе swagger или ошибку сервера 503.
Ссылка на образец проекта Образец проекта
Вот мои полиморхи c модели
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);