我正在使用 ASP.NET Core 8 Web API 和 Swagger。
当我尝试使用
UseAllOfForInheritance
来生成带有 allOf
的代码时,使用以下代码构建 swagger:
builder.Services.AddSwaggerGen(
(opt) =>
{
opt.SupportNonNullableReferenceTypes();
opt.UseAllOfForInheritance();
opt.SelectDiscriminatorNameUsing(type => type.Name);
})
它向我显示了一个错误,表明它期望一个枚举值,即使请求或其响应中没有枚举,而 swagger 正在尝试为其生成元素。
System.ArgumentException:提供的类型必须是枚举。 (参数'枚举类型')
我如何追踪这个问题以了解是什么原因造成的?除了类全名之外,异常不会告诉我属性名称或它试图生成的内容的任何描述。
我正在尝试为其生成 swagger 文档的 DTO 示例:
public class SeriesBase
{
public long Id { get; set; }
// DX: Index
public required string Name { get; set; }
public long? CategoryId { get; set; }
}
public class SeriesTable : SeriesBase, ITrackCreate, ITrackUpdate
{
#region ITrack Members
public DateTime CreatedAt { get; set; } = UtcNow;
public DateTime UpdatedAt { get; set; } = UtcNow;
#endregion
}
我可以使用下面的代码成功生成文档。如果您对此问题有任何疑问,您可以查看官方链接。
builder.Services.AddSwaggerGen(c =>
{
c.SupportNonNullableReferenceTypes();
c.UseAllOfForInheritance();
c.SelectDiscriminatorNameUsing(type => type.Name);
c.SelectSubTypesUsing(baseType =>
{
return typeof(Program).Assembly.GetTypes().Where(type => type.IsSubclassOf(baseType));
});
});
测试结果