从 WEB 获取所有用户 API

Get all users from WEB API

我想在 WEB API MVC5 项目中创建服务 returns 用户创建。

这个有效

[Route("getUsers")]

    // GET: User
    public List<ApplicationUser> getUsers()
    {
        List<ApplicationUser> users = DbContext.Users.ToList();
        return users;
    }

但它 returns 来自用户的所有数据,我只对返回 FullName 和 Id 感兴趣。

关于如何限制结果有什么建议吗?

DbContext.Users.ToList()更改为DbContext.Users.Select(u => new ApplicationUser() {ID = u.ID, Name = u.Name}).ToList();

三个suggestions/enhancements:

  • Web API 旨在用于创建 RESTful 服务。检查您是否使用 HTTP/GET 调用整个操作并且路由本身显示 getXXX。至少将路线更改为 /users

  • 不要通过网络 return 域对象。您需要实施 data-transfer objects。如果您的用例很少 return usersone user,请设计一个仅具有这些属性的 class .此外,这很重要,因为 DbContext 编辑的对象 return 很重:它们还包含跟踪信息和其他内容,因为它们是 对象代理 。您将在序列化和反序列化时避免一些开销和错误。

  • 您的代码应如下所示:DbContext.Users.Select(u => new UserDto { Id = u.ID, Name = u.Name }).ToList()。为了避免手动映射您的对象,我建议您查看 AutoMapper 库。

  • Design/implement 一个领域层,可以在你的 Webinjected/instantiatedAPI 中封装这种复杂性,让 WebAPI 调用像 userService.ListUsers().

你甚至不需要使用 List,这样做:

[Route("getUsers")]
// GET: User
public IQueryable<object> getUsers()
{
    var users = DbContext.Users.Select( u => new {Id = u.Id, Fullname = u.Fullname});
    return users;
}

如果您没有直接的 Fullname 属性,您可以从 FirstnameLastname 等其他属性中获取 if,如下所示:

var users = DbContext.Users.Select( u => new {Id = u.Id, Fullname = u.Firstname + " " + u.Lastname});

您可以使用 IEnumerable 的 .Select 扩展方法投影您的数据。 你可以这样做

var users = DbContext.Users(u=> new { Id = u.Id, Fullname = u.Fullname });
return users;