2016-01-28 56 views
0

我想在WEB API MVC5项目中创建一个服务,返回用户创建的。从WEB API获取所有用户

这工作

[Route("getUsers")] 

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

但它返回从用户,在这里我只返回全名和标识感兴趣的所有数据。

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

+0

创建视图模型类从'ApplicationUser'需要只包含字段和返回此类,而不是'名单列表' –

回答

2

三点建议/改进:

  • 的Web API是指用于创建RESTful服务。检查您是否使用HTTP/GET调用整个操作,路线本身表示getXXX。将路线改为至少/users

  • 不要通过电线返回域对象。您需要实施data-transfer objects。如果你没有几个用例返回用户一个用户,设计一个只有这些属性的类。此外,这很重要,因为由DbContext返回的对象很重,它们还包含跟踪信息和其他内容,因为它们是对象代理。序列化和反序列化时,您将避免一些开销和错误。

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

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

0

变化DbContext.Users.ToList()DbContext.Users.Select(u => new ApplicationUser() {ID = u.ID, Name = u.Name}).ToList();

0

你甚至都不需要使用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像其他属性得到,如果so:

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

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

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