2016-01-28 3 views
0

Я хочу создать службу в проекте WEB API MVC5, который возвращает пользователей.Получить всех пользователей от WEB API

Это работает

[Route("getUsers")] 

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

но он возвращает все данные от пользователей, где меня интересуют только в возвращении FullName и Id.

Любые предложения о том, как ограничить результат?

+0

Создать класс ViewModel, содержащий только поля из 'ApplicationUser' вам нужно, и возвращать список этого класса вместо' List ' –

ответ

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 собственности, вы могли бы получить, если от других свойств, таких как Firstname и Lastname как так:

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

Вы можете проектировать свои данные с помощью метода расширения .Select для IEnumerable. Вы могли бы сделать что-то вроде этого

var users = DbContext.Users(u=> new { Id = u.Id, Fullname = u.Fullname }); 
return users; 
Смежные вопросы