Skip to content

修复 WebApi OpenAPI Schema 生成不符合规范的问题 - #138

Open
kimdiego2098 wants to merge 1 commit into
masterfrom
dev_openapi
Open

修复 WebApi OpenAPI Schema 生成不符合规范的问题#138
kimdiego2098 wants to merge 1 commit into
masterfrom
dev_openapi

Conversation

@kimdiego2098

@kimdiego2098 kimdiego2098 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

问题说明

UseOpenApi 生成的 openapi.json 无法被 Swagger Editor 等标准 OpenAPI 工具正常解析,主要存在以下问题:

  • Schema 的 type 被输出为 StringIntegerArray 等大写值,不符合 OpenAPI 规范。
  • components.schemas 中的对象 Schema 使用 $ref 指向自身,形成循环引用。
  • 枚举、可空枚举和泛型类型可能生成未定义的 $ref
  • 泛型 Schema 的定义名称与引用名称不一致。
  • Schema 属性名使用 C# PascalCase,与默认 JSON camelCase 输出不一致。
  • 文件、文件集合、字典、元组、结构体等类型缺少正确的 OpenAPI 表达。

修改内容

  • 使用专用 JSON Converter 将 OpenAPI 数据类型序列化为小写。
  • Component Schema 直接生成为 object + properties,避免自引用。
  • 统一通过 GetSchemaName 生成泛型 Schema 名称和引用。
  • 正确处理枚举和可空枚举:
    • 输出 type: integer
    • 输出枚举值列表
    • 可空类型输出 nullable: true
  • 补充二进制文件、文件集合、字典、元组和结构体类型处理。
  • 补充 GuidUri 类型处理。
  • 注册 multipart/form-data 中使用的复杂类型。
  • Schema 属性名默认使用 camelCase。
  • 优先使用属性上的 [JsonPropertyName] 显式名称。

修复示例

修复前:

{
  "$ref": "#/components/schemas/Variable",
  "properties": {
    "Name": {
      "type": "String"
    }
  }
}

修复后:

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    }
  }
}

@netlify

netlify Bot commented Aug 12, 2026

Copy link
Copy Markdown

Deploy Preview for touchsocket canceled.

Name Link
🔨 Latest commit 70ef30a
🔍 Latest deploy log https://app.netlify.com/projects/touchsocket/deploys/6a7c866331862f000839cc2a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant