Skip to content
推广您的产品

输入输出模型

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

中台 Admin 定义了统一的接口输入输出规范,所有 API 返回 ResultOutput<T> 格式,分页查询使用 PageInput / PageOutput

统一响应 ResultOutput

应用场景

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

响应结构

json
{
  "success": true,
  "code": null,
  "msg": null,
  "data": {}
}
字段类型说明
Successbool是否成功
Codestring业务编码
Msgstring消息
DataT数据

在 Service 中使用

csharp
// 返回成功(带数据)
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 格式。

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

分页输入 PageInput

应用场景

列表查询接口的入参。

属性

属性类型说明
CurrentPageint当前页(默认 1,最小 1)
PageSizeint每页条数(默认 1,最小 1)
DynamicFilterDynamicFilterInfo高级查询条件
SortListList<SortInput>排序列表

带过滤器的分页

csharp
// 定义查询输入
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;
}

无过滤器的分页

csharp
public class MyQueryInput : PageInput
{
    public string Keyword { get; set; }
}

分页输出 PageOutput

csharp
public class PageOutput<T>
{
    public long Total { get; set; }       // 数据总数
    public IList<T> List { get; set; }    // 数据列表
}

查询基类 QueryInput

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

csharp
public abstract class QueryInput
{
    public DynamicFilterInfo DynamicFilter { get; set; }
    public List<SortInput> SortList { get; set; }
}

排序输入 SortInput

csharp
public class SortInput
{
    public string PropName { get; set; }   // 属性名
    public SortOrder? Order { get; set; }  // Asc / Desc
}

导入导出

ExportInput

csharp
public class ExportInput
{
    public string FileName { get; set; }  // 导出文件名
}

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

ImportOutput

csharp
public class ImportOutput
{
    public long Total { get; set; }        // 总记录数
    public long InsertCount { get; set; }  // 新增数
    public long UpdateCount { get; set; }  // 更新数
}

状态码枚举

枚举值说明
Status0NotOk0操作失败
Status1Ok1操作成功
Status401Unauthorized401未授权
Status403Forbidden403无权限
Status404NotFound404未找到
Status500InternalServerError500服务器错误