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 devuelvestring
, 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.