Abp封装了AbpJsonResult
继承于JsonResult,其中主要添加了两个属性:CamelCase 驼峰式命名 和Indented 是否缩进并在AbpController 中重载了Controller的Json()方法,强制所有返回的Json格式数据为AbpJsonResult类型,并提供了AbpJson()的虚方法。
其中result为代码中指定返回的数据。其他几个键值对是ABP封装的,包含了是否认证、是否成功、错误信息,以及目标Url。这几个参数是不是很sweet。也可以通过调用return AbpJson() 来指定参数进行json格式化输出。
所以开始如果我们直接获取json字符串的时候,会发现与我们原来的json不一样.如果在前端框架直接调用json()方法返回的时候,返回的不是json而是一个对象.当不需要abp对json进行封装包裹怎么办?只需要在方法上标记 [DontWrapResult] 特性标签即可。在AbpResultFilter 和AbpExceptionFilter 过滤器中会根据WrapResultAttribute、DontWrapResultAttribute 特性进行相应的过滤。
就拿一个简单的登录页来说,我们看看封装前和封装之后的代码
{success: true, Msg: "登录成功"}
封装之后,
{
result: {success: true, msg: "登录成功"},
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}
标记示例
/// <summary>
/// 查询所有用户信息
/// </summary>
/// <returns></returns>
[DontWrapResult]
public async Task<GetMatUserOutput> GetMatUserAll()
{
//获取实体
//var peopleEntityList = await _matUserRepository.GetAllList(person => person.Name.Contains(input.SearchedName));
var peopleEntityList = await _matUserRepository.GetAllListAsync();
//转换为DTO对象
var peopleDtoList = peopleEntityList
.Select(person => new MatUserDto
{
Id = person.Id,
UserName = person.UserName,
MailAddress = person.MailAddress
}).ToList();
return new GetMatUserOutput
{
User = ObjectMapper.Map<List<MatUserDto>>(peopleDtoList)
};
}