2016-04-19 14 views
1

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.

+1

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. –

+0

@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

+1

Ich denke, lass es. Es sagt, was Sie meinen, und Sie haben einen Scheck dafür. –

Antwort

2

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.