我尝试在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));