从 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 旨在用于创建 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
属性,则可以从其他属性(如Firstname
和Lastname
)获取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;