Admin Core

中台 Admin 输入输出模型规范

命名空间:ZhonTai.Admin.Core.Dto

命名空间:ZhonTai.Admin.Core.Dto

统一响应包装(ResultOutput)

所有 DynamicApi 接口的返回值自动包装为统一格式。

响应结构

1
2
3
4
5
6
{
"success": true,
"code": null,
"msg": null,
"data": {}
}
字段 类型 说明
Success bool 是否成功
Code string 业务编码
Msg string 提示消息
Data T 返回数据

使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 返回成功(带数据)
return ResultOutput.Ok(entity);

// 返回成功(带消息)
return ResultOutput.Ok(entity, "操作成功");

// 返回成功(无数据)
return ResultOutput.Ok();

// 返回失败
return ResultOutput.NotOk("操作失败");

// 根据布尔值返回
return ResultOutput.Result(rows > 0);

// 抛出业务异常
throw ResultOutput.Exception("用户不存在");

// 带编码和状态码
throw ResultOutput.Exception("参数错误", "PARAM_ERROR", 400);

业务异常(AppException)

手动抛出的 AppException 会被全局异常过滤器捕获并转换为 ResultOutput 格式。

1
2
3
throw new AppException("用户不存在");
throw new AppException("参数错误", "PARAM_ERROR");
throw new AppException("参数错误", "PARAM_ERROR", 400);

分页模型

分页输入(PageInput)

用于列表查询接口的入参。

属性 类型 说明
CurrentPage int 当前页(默认 1)
PageSize int 每页条数(默认 20)
DynamicFilter DynamicFilterInfo 高级查询条件
SortList List<SortInput> 排序列表

带过滤器的分页查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 定义查询输入
public class ArticlePageInput : PageInput<ArticleFilterInput> { }

public class ArticleFilterInput
{
public string Title { get; set; }
public int? Status { get; set; }
}

// 在 Service 中使用
public async Task<PageOutput<ArticleListOutput>> GetPageAsync(ArticlePageInput input)
{
var list = await _repository.Select
.WhereIf(input.Filter.Title.NotNull(), a => a.Title.Contains(input.Filter.Title))
.WhereIf(input.Filter.Status.HasValue, a => a.Status == input.Filter.Status)
.OrderByDescending(a => a.Id)
.ToPageOutputAsync(input);

return list;
}

无过滤器的分页查询

1
2
3
4
public class MyQueryInput : PageInput
{
public string Keyword { get; set; }
}

分页输出(PageOutput)

1
2
3
4
5
public class PageOutput<T>
{
public long Total { get; set; } // 数据总数
public IList<T> List { get; set; } // 数据列表
}

查询与排序

查询基类(QueryInput)

非分页查询的基类,提供排序和高级过滤能力。

1
2
3
4
5
public abstract class QueryInput
{
public DynamicFilterInfo DynamicFilter { get; set; }
public List<SortInput> SortList { get; set; }
}

排序输入(SortInput)

1
2
3
4
5
public class SortInput
{
public string PropName { get; set; } // 属性名
public SortOrder? Order { get; set; } // Asc / Desc
}

导入导出

导出输入(ExportInput)

1
2
3
4
5
6
7
8
9
public class ExportInput
{
public string FileName { get; set; } // 导出文件名
}

public class ExportInput<T> : ExportInput
{
public T Filter { get; set; } // 导出过滤条件
}

导入输出(ImportOutput)

1
2
3
4
5
6
public class ImportOutput
{
public long Total { get; set; } // 总记录数
public long InsertCount { get; set; } // 新增数
public long UpdateCount { get; set; } // 更新数
}

状态码枚举

枚举值 说明
Status0NotOk 0 操作失败
Status1Ok 1 操作成功
Status401Unauthorized 401 未授权
Status403Forbidden 403 无权限
Status404NotFound 404 未找到
Status500InternalServerError 500 服务器错误

#中台 #中台/新建接口项目 #中台/数据库配置 #编程/C#