Sto provando a [EnableQuery]
su una route (utente) con ID come esempio se faccio un:
GET /users/1?$expand=Character
Vorrei ottenere l'utente con ID 1 con il suo personaggio ma attualmente mi restituisce null sul personaggio:
{"character":null,"id":1,"username":"Iterer","password":"motdepasse","characterId":1}
Ma sulla rotta (globale) per ottenere tutti gli utenti:
GET /users?$expand=Character
Ricevo il personaggio dell'utente come puoi vedere:
[{"character":{"id":1,"name":"Name"},"id":1,"username":"Iterer","password":"motdepasse","characterId":1}]
Ecco le azioni del mio controller:
// 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);
}
Entrambi usano l'interfaccia IQueryable ma ancora non capisco perché non funziona, ecco il controller completo:
https://github.com/myerffoeg/gaium-api/blob/master/Gaium/Controllers/UsersController.cs
e il mio file di avvio:
https://github.com/myerffoeg/gaium-api/blob/master/Gaium/Startup.cs
Inoltre, se hai alcune buone pratiche da condividere, ti saremmo grati grazie!
Entrambi usano l'interfaccia IQueryable ma ancora non capisco perché non funziona
Bene, la differenza è che mentre il metodo "non funzionante" afferma di restituire IQueryable<UserEntity>
:
public ActionResult<IQueryable<UserEntity>> GetUserEntity(long id)
l'implementazione restituisce una singola istanza materializzata UserEntity
.
Al fine di abbinare l'affermazione, l'implementazione dovrebbe essere invece così (in pratica il primo metodo con la clausola Where
applicata):
return Ok(_context.Users.Where(u => u.Id == id));