2013-08-28 13 views
32

Ich wurde vor kurzem gefragt, warum ContentResult statt Zeichenfolge zu verwenden. Leider konnte ich keine bessere Antwort geben als: "Es ist Best Practice."Asp.Net Mvc: ContentResult vs. Zeichenfolge

Hat jemand eine bessere Antwort?


Update: Um die Frage besser zu verstehen. Was ist der Unterschied?

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

Contentstandardmäßig zurückkehrt: wie so ein einfacher String zurück

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

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

Antwort

32

zurückzukehren, wenn Sie etwas anderes als ein ActionResult das Standardverhalten zurückkehren ein ContentResult Einwickeln das Ergebnis des Aufrufs ToString() auf erstellen, ist alles, was du getan hast Rückkehr (oder EmptyResult wenn Sie null zurück Gründe ich mich vorstellen kann explizit ContentResult zurückzukehren.

  • Es verstärkt die Tatsache, dass das Verfahren eine Handlung, eher als ein normales Verfahren, so devs ist weniger wahrscheinlich, Fehler zu machen wie es beiläufig umbenannt wird
  • Wenn Sie in Zukunft den Inhaltstyp angeben müssen, müssen Sie die Methodensignatur nicht ändern.
  • Es versteckt den ToString() Aufruf nicht. Dies ist unabhängig davon, ob Sie string zurückgeben, aber das Zurückgeben eines komplexen Typs kann zu unerwarteten Ergebnissen führen.
12

Sie können nicht eine Zeichenfolge auf ein Verfahren zurück, die eine Actionzurückgibt, so ist dies, wenn Sie ein Content verwenden könnte eine Art von text/plain. Wenn Sie immer nur benötigt, um eine Zeichenfolge zurück, dann würden Sie die Methode verwenden, um eine Zeichenfolge

+0

Warum sollte die Nachricht ActionResult zurückgeben? – Tobias

+6

In MVC 4 ist der Standardinhaltstyp für 'ContentResult'' text/html'. (Quelle: Ich habe es gerade versucht.) –

+0

Ausgezeichnete Antwort mit Beispiel! – usefulBee

1

Ein Unterschied wie ich weiß, ist:

Inhalt Rückgabeergebnis ohne Anführungszeichen, wenn Sie wollen.

String-Rückgabeergebnis in Zitate Markierungen die ganze Zeit.

4

Zwei wesentliche Vorteile:

  • Sie können über die ContentEncoding Eigenschaft
  • den Inhalt Codierung angeben Sie den Inhaltstyp angeben (dh 'text/html') über die ContentType Eigenschaft

Wenn Sie darüber hinaus OO-clean sein möchten, ContentResult, zusammen mit allen ActionResult abgeleiteten Klassen folgen Sie der Command Pattern durch Bereitstellung eines ExecuteResult Befehl für die MVC-Rohr Linie zu laufen.

1

Die Rückgabe eines ContentResult hilft beim Schutz Ihrer Anwendung.

Wenn Ihre Anwendung beispielsweise Eingaben von Benutzern zulässt, versucht ein böswilliger Benutzer möglicherweise, einen JavaScript-Text zu analysieren. Dadurch wird verhindert, dass JavaScript in Ihrer Anwendung ausgeführt wird.