<Nullable>enable</Nullable>配置项。所有实体类默认继承自EntityBase,该类定义了Id、CreatedAt、UpdatedAt,IsDeleted常用属性。
Id属性默认使用Guid类型,客户端Guid V7生成。
string类型,要定义最大长度,除非明确不限长度。
decimal类型,精度和小数位数需要明确。
对于较小范围的decimal类型,建议使用decimal(10, 2)
对于较大范围的decimal类型,建议使用decimal(18, 6)
[Column(TypeName = "decimal(10,2)")] public decimal TotalPrice { get; set; }
所有枚举值必须添加[Description]特性。
时间类型使用DateTimeOffset,而不是DateTime,以确保时间信息是完整的。
明确仅为日期的属性,使用DateOnly类型。
明确仅为时间的属性,使用TimeOnly类型。
帮助类通常用Helper结尾,并且Helper类通常是静态类,与DI无关。
服务类通常用Service结尾,并且Service类通常是实现类,通常需要注入到DI中。
ManagerBase类,将会被自动注入到DI中。如果不继承,需要手动注入。整体以RESTful风格为标准。
控制器方法命名简单一致,如添加用户,直接使用AddAsync,而不是AddUserAsync,如:
返回以HTTP状态码为准。
接口请求成功时, 前端可直接获取数据。
接口请求失败时,返回统一的错误格式。
前端根据HTTP状态码判断请求是否成功,然后获取数据。
错误返回的格式如下:
{
"title": "",
"status": 500,
"detail": "未知的错误!",
"traceId": "00-d768e1472decd92538cdf0a2120c6a31-a9d7310446ea4a3f-00"
}
// 修改信息 [HttpPut("{id}")] public async Task<ActionResult<TEntity?>> UpdateAsync([FromRoute] Guid id, TUpdate form)
// 如果错误,使用Problem返回内容 return Problem("未知的错误!", title: "业务错误");
// 如果不存在,返回404 return NotFound("用户名密码不存在");