c# - Swashbuckle.AspNetCore openapi 架构中未正确显示可空属性
问题描述
Swashbuckle.AspNetCore v6.0.7
在asp.net core
项目中使用net5.0
。
假设我有这样的模型:
public enum MyEnum
{
A, B
}
和
public class MyModel
{
public MyEnum MyEnum { get; set; }
public MyEnum? MyEnum2 { get; set; }
}
并且大摇大摆的模式是这样生成的:
"MyEnum": {
"enum": [
"A",
"B"
],
"type": "string"
},
"MyModel": {
"type": "object",
"properties": {
"myEnum": {
"$ref": "#/components/schemas/MyEnum"
},
"myEnum2": {
"$ref": "#/components/schemas/MyEnum"
}
},
"additionalProperties": false
}
如您所见,open-API JSON 模式之间没有MyEnum
区别MyEnum?
!
并且似乎可以为空的枚举未正确显示在架构中。
有谁知道我该如何解决这个问题?
最好的
解决方案
按照尤依依的建议,我是这样打UseAllOfToExtendReferenceSchemas
进来的SwaggerGenOptions
:
services.AddSwaggerGen(c =>
{
c.UseAllOfToExtendReferenceSchemas();
});
现在生成的模式如下:
"MyEnum": {
"enum": [
"A",
"B"
],
"type": "string"
},
"MyModel": {
"type": "object",
"properties": {
"myEnum": {
"allOf": [
{
"$ref": "#/components/schemas/MyEnum"
}
]
},
"myEnum2": {
"allOf": [
{
"$ref": "#/components/schemas/MyEnum"
}
],
"nullable": true
}
},
"additionalProperties": false
},
并且有"nullable": true
类型MyEnum?
。
您可以在此处找到更多信息。
感谢Yiyi You
.
推荐阅读
- azure - 是否可以在 Azure DevOps 代理池中的所有现有代理之间分散管道负载?
- javascript - 模块化服务提供者 node.js
- javascript - 在 Vue js 中的大型模块上的文本输入或文本区域中键入缓慢
- java - 如何在 Vscode 中启用 java linter?
- loops - 如何检查此特定输入?
- css - 将 CSS 类传递给 Angular 库
- c - 输入超过 2 个数据时年龄打印错误
- reactjs - FirebaseError:未指定存储桶名称或无效
- flutter - 如何使透明图像的特定部分可点击?
- reactjs - React 路由器未根据条件重定向