.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);
}