mvc asp.net asp.net-mvc string return-value result

Asp.Net Mvc: ContentResult vs. cadena



actionresult return string (6)

Recientemente me preguntaron por qué usar ContentResult en lugar de devolver la cadena. Desafortunadamente, no pude dar una respuesta mejor que: "Es la mejor práctica".

¿Alguien tiene una mejor respuesta?

Actualización: Para comprender mejor la pregunta. ¿Cual es la diferencia?

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


Devolver un ContentResult ayuda a proteger su aplicación.

Por ejemplo, si su aplicación permite la entrada de usuarios, un usuario malintencionado puede intentar analizar un texto de JavaScript. Esto evitará que javascript se ejecute en tu aplicación


Dos ventajas principales:

  • Puede especificar la codificación del contenido a través de la propiedad ContentEncoding
  • Puede especificar el tipo de contenido (es decir, ''text / html'') a través de la propiedad ContentType

Además, si desea ser OO-clean al respecto, ContentResult , junto con todas las clases derivadas de ActionResult siguen el patrón de comando al proporcionar un comando ExecuteResult para que se ejecute la ActionResult MVC.


No puede devolver una cadena en un método que devuelve un ActionResult, por lo que aquí es cuando podría usar un ContentResult para devolver una cadena simple así:

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

ContentResult de forma predeterminada devuelve un tipo de text/plain . Si solo necesitas devolver una cadena, entonces usarías el método para devolver una cadena


Otra diferencia es que el resultado del contenido puede devolver el resultado del contenido diferente. Como cadena, HTML, resultado de JavaScript, etc.

Pero la cadena devuelve solo el resultado de la cadena.


Si devuelve algo que no sea un ActionResult el comportamiento predeterminado es crear un ContentResult el resultado de llamar a ToString() en lo que haya devuelto (o EmptyResult si devuelve null . Razones que se me ocurren para devolver explícitamente ContentResult :

  • Refuerza el hecho de que el método es una acción, en lugar de un método regular, por lo que los desarrolladores son menos propensos a cometer errores, como cambiar el nombre casualmente.
  • Si en el futuro necesita especificar el tipo de contenido, no necesitará cambiar la firma del método.
  • No oculta la llamada ToString() . Esto no importa si devuelve string , pero devolver un tipo complejo podría tener resultados inesperados.

Una diferencia que sé es:

Resultado de devolución de contenido sin comillas si lo desea.

El resultado del retorno de cadena en comillas marca todo el tiempo.