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