Asp.Net Mvc: ContentResult vs. string
on m'a récemment demandé Pourquoi utiliser ContentResult au lieu de renvoyer string. Malheureusement, je n'ai pas pu donner une meilleure réponse que: "C'est une bonne pratique."
quelqu'un aurait-il une meilleure solution?
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";
}
6 réponses
si vous retournez autre chose qu'un ActionResult
le comportement par défaut est de créer un ContentResult
emballage le résultat de l'appel à EmptyResult si vous êtes de retour null
. Des raisons que je peux penser à renvoyer explicitement ContentResult
:
- il renforce le fait que la méthode est une action, plutôt qu'une méthode régulière, de sorte que les dévs sont moins susceptibles de faire des erreurs comme le renommage désinvolte.
- Si dans le futur, vous devez spécifier le content-type vous n'aurez pas besoin de changer la signature de la méthode.
- ne pas cacher l'
ToString()
appel. Cela n'a pas d'importance si vous revenezstring
, mais retourner un type complexe pourrait avoir des résultats inattendus.
vous ne pouvez pas retourner une chaîne sur une méthode qui renvoie un résultat D'action, donc c'est quand vous pouvez utiliser un ContentResult pour retourner une chaîne simple comme ça:
public ContentResult Hello()
{
return Content("hello world!");
}
Contententresult par défaut renvoie un type de text/plain
. Si vous avez seulement besoin de retourner une chaîne de caractères, alors vous devez utiliser la méthode retourne une chaîne de caractères
Deux principaux avantages:
- Vous pouvez spécifier l'encodage du contenu via le
ContentEncoding
propriété - vous pouvez spécifier le type de contenu (ie, 'text/html') via le
ContentType
propriété
Aussi, si vous voulez être OO-propre sur elle, ContentResult
, avec ActionResult
les classes dérivées suivent les Modèle De Commande en fournissant un ExecuteResult
commande pour le fonctionnement du pipeline MVC.
Une différence que je sais, c'est :
résultat de retour de contenu sans guillemets si vous voulez.
String résultat de retour dans les Citations de marques de tous les temps.
retourner un ContentResult aide à protéger votre application.
par exemple, si votre application permet l'entrée de données par les utilisateurs, un utilisateur malveillant pourrait essayer d'analyser un texte javascript. Cela empêchera javascript d'exécuter dans votre application
une autre différence est le résultat de contenu peut retourner le résultat de contenu différent. Comme la chaîne de caractères, Html, résultat JavaScript, etc.
Mais la chaîne de retour seulement la chaîne de résultat.