Swagger/NSwag:重新定义参数类型
Swagger/NSwag: Redefine Parameter Type
我们正在使用 swagger / nswag 作为 webapi 项目的文档。
作为 ActionMethods 的 BodyParameters,我们使用 类 和后缀 Command,其中包含例如参数创建一个持久化在数据库中的域对象。
命令-Class 可能如下所示:
public class CreateChildCommand {
public Parent Parent { get; set; }
public int Position { get; set; }
}
虽然 Position 是一个简单的 int,但 Parent 是一个 Domain-Class 保存在数据库中。可能看起来像这样:
public class Parent {
public Guid Id { get; set; }
public string Name { get; set; }
...
}
它可以通过它的 Id 从数据库加载,所以我们只需将 id 作为参数传递到 Json 中作为命令参数,如下所示:
{
"Position": 3,
"Parent": "41E71207-7F1E-4895-8BCC-14E1293A7907"
}
反序列化 Json 时,父级通过 Dao 由其 Id 加载。
现在的问题是,swagger/nswag 不理解 "magic" 并显示方法的参数,如下所示:
{
"Position": number,
"Parent": {
Id: "Guid",
"Name": "string",
...
}
}
有什么方法可以告诉 swagger 替换父级的类型,使其看起来像这样:
{
"Position": "int",
"Parent": "Guid"
}
您可以使用 JsonSchemaAttribute 属性覆盖复杂的架构类型 属性:
public class CreateChildCommand {
[JsonSchema(JsonObjectType.String, Format = "guid")]
public Parent Parent { get; set; }
public int Position { get; set; }
}
该属性在 NJsonSchema 库中实现:https://www.nuget.org/packages/NJsonSchema/
另一种选择是使用类型映射器将所有 Parent 类 映射到字符串,请参阅 https://github.com/RSuter/NJsonSchema/wiki/Type-Mappers
我们正在使用 swagger / nswag 作为 webapi 项目的文档。
作为 ActionMethods 的 BodyParameters,我们使用 类 和后缀 Command,其中包含例如参数创建一个持久化在数据库中的域对象。
命令-Class 可能如下所示:
public class CreateChildCommand {
public Parent Parent { get; set; }
public int Position { get; set; }
}
虽然 Position 是一个简单的 int,但 Parent 是一个 Domain-Class 保存在数据库中。可能看起来像这样:
public class Parent {
public Guid Id { get; set; }
public string Name { get; set; }
...
}
它可以通过它的 Id 从数据库加载,所以我们只需将 id 作为参数传递到 Json 中作为命令参数,如下所示:
{
"Position": 3,
"Parent": "41E71207-7F1E-4895-8BCC-14E1293A7907"
}
反序列化 Json 时,父级通过 Dao 由其 Id 加载。 现在的问题是,swagger/nswag 不理解 "magic" 并显示方法的参数,如下所示:
{
"Position": number,
"Parent": {
Id: "Guid",
"Name": "string",
...
}
}
有什么方法可以告诉 swagger 替换父级的类型,使其看起来像这样:
{
"Position": "int",
"Parent": "Guid"
}
您可以使用 JsonSchemaAttribute 属性覆盖复杂的架构类型 属性:
public class CreateChildCommand {
[JsonSchema(JsonObjectType.String, Format = "guid")]
public Parent Parent { get; set; }
public int Position { get; set; }
}
该属性在 NJsonSchema 库中实现:https://www.nuget.org/packages/NJsonSchema/
另一种选择是使用类型映射器将所有 Parent 类 映射到字符串,请参阅 https://github.com/RSuter/NJsonSchema/wiki/Type-Mappers