ASP.NET Core - Resultados de acciones
En este capitulo, discutiremos los resultados de las acciones. En los capitulos anteriores, usamos classs de C # simples y directas como controladores. Estas classs no se derivan de una class base y puede utilizar este enfoque con MVC, pero es mas comun derivar un controlador de una class base de controlador proporcionada en el espacio de nombres. Microsoft.AspNet.Mvc.
-
Esta class base nos da acceso a mucha informacion contextual sobre una consulta, asi como a metodos que nos ayudan a generar resultados. para ser devuelto al cliente.
-
Puede devolver cadenas individuales y numeros enteros en una respuesta. Tambien puede devolver objetos complejos como un objeto para representar a un estudiante o una universidad o un restaurante, etc. y todos los data asociados con ese objeto.
-
Estos sonLos resultados generalmente se envuelven en un objeto que implementa la interfaz IActionResult.
-
Hay muchos tipos de resultados diferentes que implementan esta interfaz: tipos de resultados que pueden contener plantillas o el contenido de un archivo para descargar.
-
Estos diferentes tipos de resultados pueden permitirnos devolver JSON a un cliente o XML o una vista que construya HTML.
Acciones esencialmente devuelve diferentes tipos de resultados de accion. La class ActionResult es la base para todos los resultados de las acciones. Aqui hay una lista de diferentes tipos de resultados de acciones y su comportamiento.
Nombre | Behavior |
ContentResult | Devuelve una cadena |
FileContentResult | Devuelve el contenido del archivo |
FilePathResult | Ren devuelve el contenido del archivo |
FileStreamResult | Devuelve el contenido del archivo. |
EmptyResult | No devuelve nada |
JavaScriptResult | Devuelvelo para ejecucion |
JsonResult | Retu rns Data en formato JSON |
RedirectToResult | Redirige a la URL especificada |
HttpUnauthorizedResult | Devuelve el codigo de estado HTTP 403 |
RedirectToRouteResult | Redirigir a una accion diferente / accion de controlador diferente |
ViewResult | Recibido como respuesta para el motor view |
PartialViewResult | Recibido como respuesta para el motor de vista |
Ejemplo 1
Tomemos un ejemplo simple al abrir la class HomeController y derivarlo de la class basada en el controlador. Esta class base esta en el espacio de nombres Microsoft.AspNet.Mvc . Aqui esta la implementacion de la class HomeController.
usando Microsoft.AspNet.Mvc; usando el sistema; utilizando System.Collections.Generic; utilizando System.Linq; usando System.Threading.Tasks; espacio de nombres FirstAppdemo.Controllers {public class HomeController: Controller {public ContentResult Index () {return Content ( "¡Hola, mundo! Este mensaje viene del Home Controller usando el resultado de la accion "); }}}
Ahora puede ver que el metodo de indice devuelve ContentResult, que es uno de los tipos de resultados, y todos esos tipos de resultados finalmente implementan una interfaz, que es ActionResult .
En el metodo Index, pasamos una cadena al metodo Content. Este metodo de contenido produce un ContentResult; esto significa que el metodo Index ahora devolvera ContentResult .
Guarde la class HomeController y ejecute la aplicacionen el navegador. Producira la pagina siguiente.
Ahora puede ver una respuesta que no se ve diferente de la respuesta que teniamos antes. Siempre sera una respuesta de texto sin formato.
-
Quizas se este preguntando que es l ventaja de usar algo que produce un ActionResult.
-
La ventaja tipica es que es simplemente una cuestion de 'una forma formal de encapsular la decision del controlador.
-
El controlador decide que hacer a continuacion, devolver una cadena o HTML, o devolver un objeto de plantilla que podria ser serializado como JSON, etc.
-
Todo lo que el controlador tiene que hacer es tomar esta decision y el controlador no tiene que escribir los resultados directamente en la respuesta de su decision.
-
Basta con devolver la decision y luego es el marco quetome un resultado y descubra como convertir ese resultado en algo que se pueda devolver a traves de HTTP.
Ejemplo 2
Tomemos otro ejemplo. Cree una nueva carpeta en el proyecto y asignele el nombre Plantillas . En la carpeta Modelos, queremos agregar una class que pueda representar a un Empleado.
Ingrese Employee.cs en el Campo de nombre como en la captura de pantalla anterior. Aqui la implementacion de la class Empleado contiene dos propiedades.
using System; using System.Collections .Generic; using System.Linq; using System.Threading.Tasks; espacio de nombres FirstAppDemo.Models {Public class Employee {public int ID {get; set;} public string Name {get; set}}}
En el metodo de accion Index de HomeController , queremos devolver un objeto Employee. Aqui esta la implementacion de HomeController.
usando FirstAppDemo.Models; usando Microsoft.AspNet.Mvc; usando system; usando System.Collections.Generic; usando System.Linq; usando System.Threading.Tasks; espacio de nombres FirstAppdemo.Controllers {public class HomeController: Controller {Public ObjectResult Index () {var employee = new Employee {ID = 1, Name = "Mark Upston "}; devuelve un nuevo ObjectResult (employee);}}}
Ahora en su lugar para devolver el contenido, devolveremos un tipo de resultado diferente que se llama ObjectResult . Si queremos un ObjectResult, necesitamos crear o instanciar un ObjectResult y pasarle un objeto modelo .
-
Un ObjectResult es especial en el marco MVC porque cuando devolvemos un ObjectResult, el marco MVC mira ese objeto. Este objeto debe estar representado en el Respuesta HTTP.
-
Este objeto debe serializarse como XML o JSON o algun otro formato y finalmente se tomara la decisionse basa en la informacion de configuracion que le proporciona al MVC al inicio. Si no configura nada, solo obtiene algunos valores predeterminados, y el valor predeterminado es una respuesta JSON.
Guarde todos sus archivos y actualice el navegador. Vera la siguiente salida.