【发布时间】:2022-01-04 08:07:45
【问题描述】:
我们开发了一个 api 并使用工具 Nswag 自动生成 Swagger api 文档。我们的 api 中有一些端点,我们想通过继承来更新一些字段。为了更深入地解释,我们有一种更新方法(如 POST api/person/{id}),其中用户在正文中提供一个 json 并通过提供鉴别器,程序知道类型,可以反序列化 json 字符串并使用正确的更新方法,比如 UpdateAddress 什么的。当用户不提供这些信息时,那么我们客户端中的反序列化对象为空并导致错误。
现在有一个问题,即生成的 Swagger 文档没有显示鉴别器“属性”。它通过使用这种方法正确地可视化具有属性的继承结构:
[JsonConverter(typeof(JsonInheritanceConverter), "discriminator")]
[KnownType(typeof(PersonUpdateAddressCommand))]
public class PersonCommand : CommandBase
{
}
用户不知道,他必须提供鉴别器属性,直到我们对他说,但最好的情况下,文档应该是不言自明的。
为了解决这个问题,我在 CommandBase 类中添加了一个名为“discriminator”的公共字符串属性:
public abstract class CommandBase
{
public string discriminator { get; set; }
}
现在它将可视化文档中的属性,但这似乎有点过头了,因为这个鉴别器“属性”已经存在于堆中的某个地方,那么为什么要定义一个额外的属性呢?
有没有办法在生成的 swagger 文档中显示鉴别器而不定义额外的属性?或者这是添加字符串属性的正确方法吗?
【问题讨论】:
-
我不知道答案,但我知道 NSwag 是开源的,您可以阅读代码并找到您希望输出鉴别器的相关位置如果您已经找不到任何支持,请添加它...