Ich habe folgende Controller-Methode:Web API 2 FromUri optional null Standardparameter
[HttpGet]
[Route("api/users/{lookup}/{id?}")]
public async Task<IHttpActionResult> GetUsers(string lookup, [FromUri]string[] id = null) { //Can a parameter than comes FromUri ever be null?
var repo = _uProvider.GetRepository(lookup);
if (repo == null) {
return Content(HttpStatusCode.NotFound, String.Concat(lookup, " is not a valid lookup type."));
}
if (id == null || id.Length == 0) { //added id.Length check because id was never null
var all = await repo.GetAll();
return Ok(all);
}
var users = await repo.GetUsersByIds(id);
if (users == null) {
return NotFound();
}
return Ok(users);
}
Warum ist es, dass, wenn ich eine Get-Anfrage an api/Benutzer/Domain einreichen, ist die string[] id
nie null? Ich musste die id.Length == 0
Prüfung hinzufügen, um den Anwendungsfall zu erfassen, in dem ein Kunde eine vollständige Liste von Benutzern innerhalb der Domäne möchte.
Ich glaube nicht, dass es "null" sein kann. Ich denke, dass es standardmäßig auf ein leeres Array zurückgreifen würde, da in der JSON-Zeichenfolge als "[]" gesendet würde. –
@DavidPine Ja, ich neige dazu, dir zu glauben, zumindest scheint das sicher zu geschehen. Denken Sie also, es wäre sicher, den Null-Standard aus der Methodensignatur zu entfernen? Oder sollte ich es dort behalten, um anzuzeigen, dass der ID-Teil optional ist, oder würden Sie das Route-Tag als ausreichend ansehen? Wenn Sie diesen Code erhalten würden, um zu erhalten, was Sie bevorzugen würden? – saarrrr
Ich denke, lass es. Es sagt, was Sie meinen, und Sie haben einen Scheck dafür. –