Swashbuckle.AspNetCore openapi 架构中未正确显示可空属性

Maj*_*vin 8 c# swagger asp.net-core swashbuckle.aspnetcore

Swashbuckle.AspNetCore v6.0.7asp.net core项目中使用net5.0

假设我有这样的模型:

public enum MyEnum
{
  A, B
}
Run Code Online (Sandbox Code Playgroud)

public class MyModel 
{
   public MyEnum MyEnum { get; set; }
   public MyEnum? MyEnum2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

swagger schema 的生成如下:

"MyEnum": {
        "enum": [
          "A",
          "B"
        ],
        "type": "string"
      },
      "MyModel": {
        "type": "object",
        "properties": {
          "myEnum": {
            "$ref": "#/components/schemas/MyEnum"
          },
          "myEnum2": {
            "$ref": "#/components/schemas/MyEnum"
          }
        },
        "additionalProperties": false
      }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,开放 API JSON 模式之间MyEnum没有区别!MyEnum?

并且似乎可以为空的枚举没有正确地出现在模式中。

有谁知道我该如何解决这个问题?

最好的

Maj*_*vin 16

按照尤依依的建议,我这样UseAllOfToExtendReferenceSchemas打电话:SwaggerGenOptions

services.AddSwaggerGen(c =>
{
       c.UseAllOfToExtendReferenceSchemas();
});
Run Code Online (Sandbox Code Playgroud)

现在架构生成如下:

"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
      },
Run Code Online (Sandbox Code Playgroud)

还有"nullable": truetype MyEnum?

您可以在这里找到更多信息。