我尝试在ID为ID的路线(用户)上使用[EnableQuery]作为示例,如果我执行以下操作:

GET /users/1?$expand=Character


我想获得ID为1且具有其Character的User,但目前它返回的字符为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

此外,如果您有一些最佳做法可以分享,将不胜感激,谢谢!

最佳答案

两者都使用IQueryable接口,但我仍然不明白为什么它不起作用


好吧,不同之处在于,尽管“不起作用”的方法声称返回IQueryable<UserEntity>

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


该实现返回单个实例化的UserEntity实例。

为了匹配声明,实现应改为这样(基本上是第一个应用Where子句的方法):

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

10-06 04:34