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";
}
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
:
ToString()
. Cela n'a pas d'importance si vous renvoyez string
, mais renvoyer un type complexe pourrait avoir des résultats inattendus.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.
Deux avantages principaux:
ContentEncoding
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.
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.
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.
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.