我在.NET Core应用程序中使用Swagger / Swashbuckle。 如何在swagger.json输出文件中添加模型属性的显示名称?
这是我的模特:
public class Role
{
[DisplayName("Role Name")]
public string Name { get; set; }
public int Level { get; set; }
}
这里是当前输出
"Role": {
"properties": {
"Name": {
"type": "string"
},
"Level": {
"format": "int32",
"type": "integer"
}
}
}
这里是所需的输出:
"Role": {
"properties": {
"Name": {
"displayName": "Role Name",
"type": "string"
},
"Level": {
"displayName": "Level",
"format": "int32",
"type": "integer"
}
}
}
答案 0 :(得分:1)
就像我在评论中提到的那样,“ displayName”不在规范中
我刚刚将其添加到我的一个文件中,以查看验证期间会发生什么:
https://validator.swagger.io/validator/debug?url=https://raw.githubusercontent.com/heldersepu/hs-scripts/master/swagger/56287697_swagger_aws.json
我们可以看到验证器不喜欢这样,我们得到一个错误:
{
"schemaValidationMessages": [ {
"level": "error",
"domain": "validation",
"keyword": "additionalProperties",
"message": "object instance has properties which are not allowed by the schema: [\"displayName\"]",
"schema": {
"loadingURI": "http://swagger.io/v2/schema.json#", "pointer": "/definitions/schema"
}
,
"instance": {
"pointer": "/definitions/MyData/properties/name"
}
}
]
}
您可以提出对规范的更改,但不要期望很快就会被添加:
https://github.com/OAI/OpenAPI-Specification/issues
我看到的唯一快速的选择或解决方法是使用扩展名:
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#specification-extensions
您可以使用IDocumentFilter注入它们:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore/search?q=IDocumentFilter
看起来IDocumentFilter在最新版本上有一些重大更改:
您所需的输出将有所变化:
"Role": {
"properties": {
"Name": {
"x-displayName": "Role Name",
"type": "string"
},
"Level": {
"x-displayName": "Level",
"format": "int32",
"type": "integer"
}
}
}
答案 1 :(得分:1)
您可以使用现成的 DisplayName() attribute
代替使用 JsonPropertyName() attribute
。
public class Role
{
[JsonPropertyName("Role Name")]
public string Name { get; set; }
public int Level { get; set; }
}