Ich habe eine Reihe von Operationen auf meiner API, die generische GetById und GetByIds sind, die eine Entität herausziehen und über einen Formatierer zurückgeben.Wie kann ich einen int [] Parameter in Web-API erforderlich machen?
Diese Operationen wie folgt aussehen:
[HttpGet]
[Route("ByIds")]
public IHttpActionResult ByIds([FromUri]int[] ids)
{
var items = _myContext.SomeEntity.Where(a => ids.Contains(a.ID)).ToList();
return SomeFormatter(items);
}
Wenn Sie dies zum Beispiel mit http://localhost/api/SomeEntity/ByIds?ids=1&ids=2
treffen, erhalten Sie ein Array mit 1 und 2 in wie man erwarten würde.
Wenn Sie dies mit http://localhost/api/SomeEntity/ByIds?ids=
treffen, können Sie erwarten, ein leeres Array zu erhalten, aber Sie erhalten int[1]
mit einem Wert von 0
drin.
Ich vermute, was passiert ist, es es als ein Element erkennt angegeben, kann es nicht konvertieren, so verwendet default(int)
und legt, dass in das Array, das Ihnen einen int-Array mit einem Wert, den Wert von 0.
gibt Aber wenn Sie es mit http://localhost/api/SomeEntity/ByIds?ids=potato
treffen, dann erhalten Sie einen ungültigen Modellstatus und ich behandle das automatisch. Die Frage ist, was ist ein Catch-Ansatz, um einen leeren Abfrageparameterwert entweder einem leeren Array oder einem ModelState-Fehler zuzuordnen (d. H. Das gleiche Verhalten wie potato, wenn Sie einen leeren Wert angeben)? Ich denke, dass ein modestate Fehler vorzuziehen ist und logischer ist.
Ich traf dieses Problem auch. Hast du eine Lösung gefunden? In meinem Fall würde ich ein leeres Array dem ModelState-Fehler vorziehen. –