2013-08-28 20 views
32

Recentemente mi è stato chiesto perché utilizzare ContentResult anziché restituire una stringa. Sfortunatamente non ho potuto dare una risposta migliore di: "È la migliore pratica".Asp.Net Mvc: ContentResult vs. stringa

Qualcuno ha una risposta migliore?


Aggiornamento: Per comprendere meglio la domanda. Qual è la differenza?

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

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

risposta

32

Se si restituisce qualcosa di diverso da un ActionResult il comportamento predefinito è quello di creare un ContentResult avvolgendo il risultato della chiamata ToString() su qualunque avete fatto ritorno (o EmptyResult se si ritorna null motivi che posso pensare di tornare esplicitamente ContentResult:.

  • rafforza il fatto che il metodo è un'azione, piuttosto che un metodo regolare, in modo da sviluppatori hanno meno probabilità di commettere errori come rinominarlo casualmente
  • Se in futuro è necessario specificare il tipo di contenuto, non sarà necessario modificare la firma del metodo.
  • Non nasconde la chiamata ToString(). Non importa se stai restituendo string, ma restituire un tipo complesso potrebbe avere risultati imprevisti.
12

Non si può restituire una stringa su un metodo che restituisce un ActionResult, quindi questo è quando si potrebbe utilizzare un ContentResult per restituire una stringa semplice in questo modo:

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

ContentResult da ritorni di default un tipo di text/plain. Se sempre e solo bisogno di restituire una stringa, quindi si può usare il metodo per restituire una stringa

+0

Perché il messaggio dovrebbe restituire ActionResult? – Tobias

+6

In MVC 4 il tipo di contenuto predefinito per 'ContentResult' è' text/html'. (Fonte: ho appena provato.) –

+0

Ottima risposta con l'esempio! – usefulBee

1

Una differenza che io sappia è:

risultato restituito Contenuto senza virgolette, se si desidera.

La stringa restituisce il risultato tra virgolette per tutto il tempo.

4

due vantaggi principali:

  • È possibile specificare la codifica del contenuto attraverso il ContentEncoding proprietà
  • È possibile specificare il tipo di contenuto (ad esempio, 'text/html') tramite la proprietà ContentType

Inoltre, se si desidera essere OO-clean su di esso, ContentResult, insieme a tutte le classi derivate ActionResult seguono lo Command Pattern fornendo un comando ExecuteResult per la pipe MVC linea da eseguire.

1

Restituzione di ContentResult consente di proteggere l'applicazione.

E.g Se l'applicazione consente l'input da parte di utenti, un utente malintenzionato potrebbe tentare di analizzare un testo javascript. Ciò impedirà l'esecuzione di javascript nell'applicazione

Problemi correlati