Ho un sacco di operazioni sulla mia API che sono generiche GetById e GetByIds che estraggono un'entità e la restituiscono tramite un programma di formattazione.Come posso rendere necessario un parametro int [] in web api?
Queste operazioni simile a questa:
[HttpGet]
[Route("ByIds")]
public IHttpActionResult ByIds([FromUri]int[] ids)
{
var items = _myContext.SomeEntity.Where(a => ids.Contains(a.ID)).ToList();
return SomeFormatter(items);
}
Se colpite questo con http://localhost/api/SomeEntity/ByIds?ids=1&ids=2
per esempio, si ottiene un array con 1 e 2 in come ci si aspetterebbe.
Se si raggiunge questo valore con http://localhost/api/SomeEntity/ByIds?ids=
, è possibile che venga visualizzato un array vuoto, ma si ottiene int[1]
con un valore di 0
.
Ho il sospetto che quello che succede è che lo riconosce come un elemento specificato, non è in grado di convertire, quindi usa default(int)
e mette che nella matrice, che ti dà un array int con un valore, il valore 0.
Tuttavia, se la colpisci con http://localhost/api/SomeEntity/ByIds?ids=potato
, ottieni uno stato modello non valido e lo gestisco automaticamente.
La domanda è, qual è un approccio catch all di mappare un valore di parametro query vuoto su un array vuoto o un errore ModelState (ovvero lo stesso comportamento di potato se si fornisce un valore vuoto)? Penso che un errore di stato modello sarebbe preferito ed è più logico.
Ho riscontrato anche questo problema. Hai trovato una soluzione? Nel mio caso preferirei un array vuoto all'errore ModelState. –