首页 > 解决方案 > 使用 Swashbuckle 生成的 OpenAPI 规范包含每个参数的默认空值

问题描述

我正在为多个 ASP.NET Core 项目使用 Swashbuckle(5.0.0-rc2,我知道有较新的版本,但我对此没有控制权)。

对于所有项目(除了一个),一切正常,生成的规范正常,“in”参数的“默认”值仅在我明确将其放入代码时出现:

public async Task<ActionResult<object[]>> Search(string searchString, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 10)

所以规格看起来像:

  {
    "name": "searchString",
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "pageNumber",
    "in": "query",
        "schema": {
          "type": "integer",
          "format": "int32",
          "default": 1
        }
      },
      {
        "name": "pageSize",
        "in": "query",
        "schema": {
          "type": "integer",
          "format": "int32",
          "default": 10
        }
      }

“默认”属性仅在代码中显示。

对于我的另一个项目(相同的 nuget 版本和几乎相同的配置),行为是不同的,我对每个参数都有“默认”属性,但为空。在代码中没有默认值:

  {
    "name": "startDate",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date-time",
      "default": ""
    }

问题是当我验证规范的语义时(当我将文件上传到 Azure API 管理器时完成)它会导致一些问题:默认值“空”当然对于日期时间值无效。

swagger 配置的唯一区别是第二个项目使用自定义方式生成模式 ID ......但我遇到了原始类型的“in”参数的问题,所以它不应该有任何影响。其他配置完全相同(我们使用内部 nuget 包来确保这一点)。

任何想法?

标签: asp.net-coreopenapiswashbuckleswashbuckle.aspnetcore

解决方案


推荐阅读