从 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 users 或 one 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
属性,您可以从 Firstname
和 Lastname
等其他属性中获取 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;
我想在 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 users 或 one 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
属性,您可以从 Firstname
和 Lastname
等其他属性中获取 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;