.Net Core Web API 具有多个属性的响应
.Net Core Web API response with multiple properties
我正在设计一个 API 端点并计划发送具有 2 个值的响应(一个是记录总数,第二个是记录列表)控制器操作设计如下
[HttpGet]
[Route("users_bycat")]
public async Task<ActionResult> GetUsersByCat([FromQuery] int categoryId )
{
var query = db_context.Users.Select(a => a).Where(p => p.CategoryId == categoryId);
var result = await query.ExecuteAsync();
return Ok(
new
{
totalRecords = result.Count(),
users = result.ToList()
}
);
}
当我调用此 api 端点时,我收到如下响应
{
"totalRecords": 37652,
"users": []
}
用户数组为空,我尝试如下所示,并设法获得列表作为响应,但我也想将计数添加到响应中
return Ok( result.ToList());
我如何确保我将同时获得 totalRecords 和用户列表作为响应的一部分
ExecuteAsync()
是多余的,因为 IQueryable
在调用 .ToList()
时具体化了。此外,调用 .Count()
将执行额外的数据库查询,因此将此调用移至 List
会更有效。例外情况是您正在实施分页。
以下应按要求运行:
[HttpGet]
[Route("users_bycat")]
public async Task<ActionResult> GetUsersByCat([FromQuery] int categoryId )
{
var results = await db_context.Users
.Where(p => p.CategoryId == categoryId)
.ToListAsync();
var dto = new
{
totalRecords = results.Count,
users = results
};
return Ok(dto);
}
我正在设计一个 API 端点并计划发送具有 2 个值的响应(一个是记录总数,第二个是记录列表)控制器操作设计如下
[HttpGet]
[Route("users_bycat")]
public async Task<ActionResult> GetUsersByCat([FromQuery] int categoryId )
{
var query = db_context.Users.Select(a => a).Where(p => p.CategoryId == categoryId);
var result = await query.ExecuteAsync();
return Ok(
new
{
totalRecords = result.Count(),
users = result.ToList()
}
);
}
当我调用此 api 端点时,我收到如下响应
{
"totalRecords": 37652,
"users": []
}
用户数组为空,我尝试如下所示,并设法获得列表作为响应,但我也想将计数添加到响应中
return Ok( result.ToList());
我如何确保我将同时获得 totalRecords 和用户列表作为响应的一部分
ExecuteAsync()
是多余的,因为 IQueryable
在调用 .ToList()
时具体化了。此外,调用 .Count()
将执行额外的数据库查询,因此将此调用移至 List
会更有效。例外情况是您正在实施分页。
以下应按要求运行:
[HttpGet]
[Route("users_bycat")]
public async Task<ActionResult> GetUsersByCat([FromQuery] int categoryId )
{
var results = await db_context.Users
.Where(p => p.CategoryId == categoryId)
.ToListAsync();
var dto = new
{
totalRecords = results.Count,
users = results
};
return Ok(dto);
}