web-dev-qa-db-fra.com

Asp.Net Mvc: ContentResult vs. string

On m'a récemment demandé pourquoi utiliser ContentResult au lieu de renvoyer une chaîne. Malheureusement, je ne pouvais pas donner une meilleure réponse que: "C'est la meilleure pratique."

Est-ce que quelqu'un a une meilleure réponse?


Mise à jour: pour mieux comprendre la question. Quelle est la différence?

public ActionResult Foo(){
    return Content("Some string");
}

public string Bar(){
    return "Some string";
}
37
Tobias

Si vous renvoyez autre chose qu'une ActionResult, le comportement par défaut consiste à créer une ContentResult encapsulant le résultat de l'appel de ToString() sur tout ce que vous avez renvoyé (ou EmptyResult si vous avez retourné null. Raisons auxquelles je peux penser de retourner explicitement ContentResult:

  • Cela renforce le fait que la méthode est une action, et non une méthode régulière, de sorte que les développeurs sont moins susceptibles de commettre des erreurs comme le renommer avec désinvolture.
  • Si à l'avenir vous devez spécifier le type de contenu, vous n'aurez pas besoin de changer la signature de la méthode.
  • Il ne cache pas l'appel ToString(). Cela n'a pas d'importance si vous renvoyez string, mais renvoyer un type complexe pourrait avoir des résultats inattendus.
37
Steve Ruble

Vous ne pouvez pas retourner une chaîne sur une méthode qui retourne un ActionResult. Vous pouvez donc utiliser ContentResult pour renvoyer une chaîne simple comme ceci:

public ContentResult Hello()
{
    return Content("hello world!");
}

ContentResult renvoie par défaut un type de text/plain. Si vous deviez uniquement renvoyer une chaîne, vous utiliseriez la méthode pour renvoyer une chaîne. 

13
Danny Brady

Deux avantages principaux:

  • Vous pouvez spécifier l'encodage du contenu via la propriété ContentEncoding
  • Vous pouvez spécifier le type de contenu (c'est-à-dire 'text/html') via la propriété ContentType

De même, si vous voulez être pur à propos de OO, ContentResult, ainsi que toutes les classes dérivées ActionResult, suivent le Modèle de commande en fournissant une commande ExecuteResult pour le pipeline MVC à exécuter.

6
christofr

Une différence que je sais, c'est:

Le contenu renvoie le résultat sans guillemets si vous le souhaitez.

String retourne le résultat dans les guillemets tout le temps.

1
Amer Jamaeen

Le renvoi d'un ContentResult protège votre application.

Si votre application autorise les utilisateurs à entrer, un utilisateur malveillant peut essayer d'analyser un texte javascript. Cela empêchera l'exécution de javascript dans votre application.

1
Ziregbe Otee

Une autre différence est que le résultat du contenu peut renvoyer un résultat de contenu différent. Comme chaîne, HTML, résultat JavaScript, etc.

Mais string ne renvoie que le résultat de la chaîne.

0
Abhishek Sharma