web-dev-qa-db-fra.com

Y a-t-il une différence entre la nouvelle méthode ObjectResult () de la méthode Ok ()?

Scénario: implémentation d'une méthode standard REST API/GET sur un contrôleur de base .net.

documentation indique que OkObjectResult est un ObjectResult avec le statut 200. Il est disponible via la méthode Ok(myResult) héritée de ControllerBase. Je suppose que c'est une méthode pratique.

Cependant, le tutorial n'utilise pas cette approche - il renvoie à la place new ObjectResult(myResult) qui passera par défaut au statut 200.

Y a-t-il une différence entre ces deux approches?

24
PMBjornerud

Techniquement il n'y a pas de différence entre les deux approches.

Si vous voulez regarder le code de OkObjectResult alors vous verrez que le OkObjectResult est un ObjectResult qui définit le code de statut 200, qui est déjà la valeur par défaut de ObjectResult.

La seule différence pour moi est la lisibilité du code et vos propres préférences ou celles de votre équipe. Il s'agit de nommer et de l'intention que vous souhaitez souligner.

 return Ok(myResult);                  // gives emphasis on status, my personal favorite

 return new OkObjectResult(myResult);  // for me a little bit verbose and the same
                                       // effect as Ok; but states we return an Object

 return new ObjectResult(myResult);    // gives emphasis of the content that is returned
34
Ralf Bönning

Mise à jour: Les deux approches de la question d'origine + la troisième approche de la réponse acceptée ont maintenant été remplacées en renvoyant simplement l'objet directement:

 return myResult

Exemple et explication pertinents de la page tutoriel actuelle:

[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);    
    if (todoItem == null)
    {
        return NotFound();
    }    
    return todoItem;
}

Le type de retour des méthodes GetTodoItems et GetTodoItem est de type ActionResult <T>. ASP.NET Core sérialise automatiquement l'objet en JSON et écrit le JSON dans le corps du message de réponse. Le code de réponse pour ce type de retour est 200, en supposant qu'il n'y a aucune exception non gérée. Les exceptions non gérées sont traduites en erreurs 5xx.

3
PMBjornerud

Je ne peux voir la différence qu'en s'appuyant sur une valeur par défaut quelque part et en fournissant cette valeur explicitement - cette dernière est généralement meilleure et votre intention est beaucoup plus claire avec OkObjectResult (ou en définissant StatusCode explicitement), ce qui est assez important. ObjectResult n'a pas par défaut StatusCode de 200 - il a en fait cette valeur null par défaut. Cependant, HttpResponse a le code d'état par défaut 200, il fonctionne donc de la même façon.

3
Evk