👨‍💻 niltor    📆 2026-08-21 14:38

使用代码生成

接下来我们来见识一下代码生成的威力。本篇文档介绍如何使用代码生成功能,这里我们将通过使用Studio WebUI来完成相关的操作。

检查项目配置

通过模板创建的项目通常不需要额外的配置。保险起见,我们还是检查一下项目配置,并了解一下配置的含义。

使用perigon studio 启动Studio WebUI,点击某个解决方案旁边的⚙️图标,打开配置弹窗:

config

以上主要是目录的配置,这意味着你不一定要使用原模板中的目录结构,你可以自定义目录结构,但要确保与配置中保持一致即可。

这里我们主要关注的是用户外键名,模板默认包含了UserId,用来表示用户实体在其他实体中的外键属性名。

Note

用户外键名指与身份验证相关的实体类,通常与数据权限有关,其标识使用IUserContext获取,在代码生成时会进行逻辑处理,所以需要与普通实体类区分出来。

生成DTO/Managers/Controllers

Warning

内置的 DTO、Manager 和 Controller 实体代码生成仅支持 Standard 类型项目。工具会读取解决方案根目录的 .config/perigon.config.toml;当其中配置 isAOT = true 时,将提示不支持 AOT 代码生成。

选择某个解决方案,进入工作台,我们将会看到实体列表,在操作列中有三个生成操作按钮,它们分别是:

  • 生成DTO:通过实体解析生成对应的DTO模型定义
  • 生成Manager:生成包含基础 CRUD 操作的Manager类,由于依赖DTO,会自动生成成DTO。
  • 生成Controller:生成包含基础 CRUD 操作的Controller类,由于依赖Manager,会自动生成成Manager和DTO。

entity_list

生成客户端请求服务

通过OpenAPI规范,我们可以生成对应的客户端请求服务代码。

首先,我们先来添加OpenAPI地址,点击左侧导航栏中的OpenAPI,进入OpenAPI管理页面,点击➕图标。

add openapi

添加后,工具会请求并解析json内容(请确保地址正确并可访问),然后提供接口列表和信息。

现在,我们来生成客户端请求服务代码,在顶部操作栏的右侧,点击</>图标:

gen request

  • 请求客户端:目前支持生成Angular,Csharp,Axios客户端请求服务。
  • 输出目录:代码生成的输出目录。
  • OnlyModels选项:默认不选中,表示生成完整的客户端请求服务代码,如果选中则只生成模型定义。
  • base.service.ts:Angular/Axios 客户端默认保留已有文件中的自定义内容;命令行可以使用 -c/--cover-base-service 覆盖,Studio 默认保留且界面不提供覆盖开关。

当选择 Csharp 客户端时,OpenAPI 的 multipart/form-data 会生成 multipart 上传方法。单个文件字段使用 MultipartFile,多个文件字段使用 IEnumerable<MultipartFile>;普通字段也会写入表单。Angular 和 Axios 客户端使用 File/File[] 构造 FormData。C# 客户端会保留 HttpClient.BaseAddress 的多级路径。

Note

如果你觉得生成的客户端请求代码不符合你的要求,可以通过自定义模板来实现,具体请参考自定义代码生成模板文档。