OData ASP.Net Core на GET с идентификатором? - PullRequest
3 голосов
/ 05 мая 2019

Я пытаюсь [EnableQuery] на маршруте (Пользователь) с идентификатором в качестве примера, если я делаю:

GET /users/1?$expand=Character

Я хотел бы получить пользователя с идентификатором 1 с его символом, нов настоящее время он возвращает меня null для символа:

{"character":null,"id":1,"username":"Iterer","password":"motdepasse","characterId":1}

Но на (глобальном) маршруте, чтобы получить всех пользователей:

GET /users?$expand=Character

Я получаю символ пользователя, как вы можете видеть:

[{"character":{"id":1,"name":"Name"},"id":1,"username":"Iterer","password":"motdepasse","characterId":1}]

Вот действия моего контроллера:

    // GET: api/Users
    [HttpGet]
    [EnableQuery]
    public ActionResult<IQueryable<UserEntity>> GetUsers()
    {
        return Ok(_context.Users);
    }

    // GET: api/Users/5
    [HttpGet("{id}")]
    [EnableQuery]
    public ActionResult<IQueryable<UserEntity>> GetUserEntity(long id)
    {
        var userEntity = _context.Users.Where(u => u.Id == id).FirstOrDefault();

        if (userEntity == null)
        {
            return NotFound();
        }

        return Ok(userEntity);
    }

Оба используют интерфейс IQueryable, но я до сих пор не понимаю, почему он не работает, вот полный контроллер:

https://github.com/myerffoeg/gaium-api/blob/master/Gaium/Controllers/UsersController.cs

и мой файл запуска:

https://github.com/myerffoeg/gaium-api/blob/master/Gaium/Startup.cs

Более того, если у вас есть несколько рекомендаций, которыми можно поделиться, мы будем благодарны!

1 Ответ

3 голосов
/ 05 мая 2019

Оба используют интерфейс IQueryable, но я до сих пор не понимаю, почему он не работает

Ну, разница в том, что пока "нерабочий" метод утверждает для возврата IQueryable<UserEntity>:

public ActionResult<IQueryable<UserEntity>> GetUserEntity(long id)

реализация возвращает один материализованный UserEntity экземпляр.

Чтобы соответствовать утверждению, реализация должна быть такой (вместо этогопервый метод с применением условия Where):

return Ok(_context.Users.Where(u => u.Id == id));
...