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";
}
35
demandé sur Tobias 2013-08-28 11:57:52

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 revenez string, mais retourner un type complexe pourrait avoir des résultats inattendus.
35
répondu Steve Ruble 2013-08-28 10:28:58

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

13
répondu Danny Brady 2013-08-28 09:05:44

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.

6
répondu christofr 2014-01-16 09:08:32

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.

1
répondu Amer Jamaeen 2013-10-13 23:58:30

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

1
répondu Ziregbe Otee 2015-02-09 20:58:56

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.

0
répondu Abhishek Sharma 2018-03-13 11:27:22