从 WEB API 获取所有用户

本文关键字:用户 获取 WEB API | 更新日期: 2023-09-27 18:32:18

我想在返回用户创建的WEB API MVC5项目中创建一个服务。

这行得通

[Route("getUsers")]
    // GET: User
    public List<ApplicationUser> getUsers()
    {
        List<ApplicationUser> users = DbContext.Users.ToList();
        return users;
    }
但它返回来自

用户的所有数据,我只对返回全名和 ID 感兴趣。

关于如何限制结果的任何建议?

从 WEB API 获取所有用户

三个建议/增强功能:

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

  • 不要通过网络返回域对象。您需要实现数据传输对象。如果返回用户或一个用户的用例很少,请设计一个仅具有这些属性的类。此外,这很重要,因为DbContext返回的对象很重:它们还包含跟踪信息和其他内容,因为它们是对象代理。在序列化和反序列化时,您将避免一些开销和错误。

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

  • 设计/实现一个可以在 WebAPI 中注入/实例化的域层,以封装这种复杂性并让 WebAPI 调用类似 userService.ListUsers() 的东西。

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

甚至不需要用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"选择扩展方法。你可以做这样的事情

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