Agregar un nuevo controlador

por Rick Anderson

Nota

Hay disponible una versión actualizada de este tutorial con la versión más reciente de Visual Studio. El nuevo tutorial usa ASP.NET Core MVC, que proporciona muchas mejoras en este tutorial.

En este tutorial se muestra ASP.NET Core MVC con controladores y vistas. Razor Pages es una nueva alternativa en ASP.NET Core, un modelo de programación basado en páginas que facilita la creación de la interfaz de usuario web y es más productivo. Se recomienda probar el tutorial de las páginas de Razor antes que la versión MVC. El tutorial de las páginas de Razor:

  • Es más fácil de seguir.
  • Abarca más características.
  • Es el enfoque preferido para el desarrollo de nuevas aplicaciones.

MVC significa model-view-controller. MVC es un patrón para desarrollar aplicaciones bien diseñadas, probables y fáciles de mantener. Las aplicaciones basadas en MVC contienen:

  • M odels: clases que representan los datos de la aplicación y que usan lógica de validación para aplicar reglas de negocios para esos datos.
  • V iews: archivos de plantilla que la aplicación usa para generar dinámicamente respuestas HTML.
  • Ontrollers de C: clases que controlan las solicitudes entrantes del explorador, recuperan datos del modelo y, a continuación, especifican plantillas de vista que devuelven una respuesta al explorador.

Trataremos todos estos conceptos en esta serie de tutoriales y le mostraremos cómo usarlos para compilar una aplicación.

Comencemos creando una clase de controlador. En Explorador de soluciones, haga clic con el botón derecho en la carpeta Controladores y, a continuación, haga clic en Agregar y, a continuación, en Controlador.

Captura de pantalla que muestra la ventana Explorador de soluciones. El menú contextual Controladores y el submenú Agregar están abiertos.

En el cuadro de diálogo Agregar scaffolding , haga clic en Controlador MVC 5 - Vacío y, a continuación, haga clic en Agregar.

Captura de pantalla que muestra el cuadro de diálogo Agregar scaffolding. M V C 5 Controller Empty (Controlador M V C 5 Vacío) está seleccionado.

Asigne al nuevo controlador el nombre "HelloWorldController" y haga clic en Agregar.

agregar controlador

Observe en Explorador de soluciones que se ha creado un nuevo archivo denominado HelloWorldController.cs y una nueva carpeta Views\HelloWorld. El controlador está abierto en el IDE.

Captura de pantalla que muestra la pestaña Hola mundo punto c del controlador abierta. En el Explorador de soluciones, la subcarpeta Hola mundo Controller dot c s y la subcarpeta Hola mundo están en círculo rojo.

Reemplace el contenido del archivo por el código siguiente.

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

Los métodos de controlador devolverán una cadena de HTML como ejemplo. El controlador se denomina HelloWorldController y el primer método se denomina Index. Vamos a invocarlo desde un explorador. Ejecute la aplicación (presione F5 o Ctrl+F5). En el explorador, anexe "HelloWorld" a la ruta de acceso de la barra de direcciones. (Por ejemplo, en la ilustración siguiente, es http://localhost:1234/HelloWorld.) La página del explorador tendrá un aspecto similar al de la captura de pantalla siguiente. En el método anterior, el código devolvió una cadena directamente. Le dijiste al sistema que solo devolva un código HTML, y lo hizo.

Captura de pantalla que muestra la pestaña host local con el texto Esta es mi acción predeterminada en la ventana.

ASP.NET MVC invoca diferentes clases de controlador (y métodos de acción diferentes dentro de ellas) en función de la dirección URL entrante. La lógica de enrutamiento de direcciones URL predeterminada que usa ASP.NET MVC usa un formato similar al siguiente para determinar qué código se va a invocar:

/[Controller]/[ActionName]/[Parameters]

El formato de enrutamiento se establece en el archivo App_Start/RouteConfig.cs .

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Cuando se ejecuta la aplicación y no se proporcionan segmentos de dirección URL, el valor predeterminado es el controlador "Inicio" y el método de acción "Index" especificado en la sección predeterminada del código anterior.

La primera parte de la dirección URL determina la clase de controlador que se va a ejecutar. Por lo tanto , /HelloWorld se asigna a la HelloWorldController clase . La segunda parte de la dirección URL determina el método de acción en la clase que se va a ejecutar. Por lo tanto , /HelloWorld/Index haría que el Index método de la HelloWorldController clase se ejecutara. Observe que solo teníamos que ir a /HelloWorld y que el Index método se usaba de forma predeterminada. Esto se debe a que un método denominado Index es el método predeterminado al que se llamará en un controlador si no se especifica explícitamente uno. La tercera parte del segmento de dirección URL (Parameters) es para los datos de ruta. Veremos los datos de enrutamiento más adelante en este tutorial.

Vaya a http://localhost:xxxx/HelloWorld/Welcome. El método Welcome se ejecuta y devuelve la cadena "This is the Welcome action method..." (Este es el método de acción de bienvenida). La asignación predeterminada de MVC es /[Controller]/[ActionName]/[Parameters]. Para esta dirección URL, el controlador es HelloWorld y Welcome es el método de acción. Todavía no ha usado el elemento [Parameters] de la dirección URL.

Captura de pantalla que muestra la pestaña host local con el texto This is the Welcome action method in the window (Este es el método de acción De bienvenida) en la ventana.

Vamos a modificar el ejemplo ligeramente para que pueda pasar información de parámetros de la dirección URL al controlador (por ejemplo, /HelloWorld/Welcome?name=Scott&numtimes=4). Cambie el Welcome método para incluir dos parámetros, como se muestra a continuación. Tenga en cuenta que el código usa la característica optional-parameter de C# para indicar que el numTimes parámetro debe tener como valor predeterminado 1 si no se pasa ningún valor para ese parámetro.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

Nota

Nota de seguridad: El código anterior usa HttpUtility.HtmlEncode para proteger la aplicación frente a entradas malintencionadas (es decir, JavaScript). Para obtener más información, vea How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings.

Ejecute la aplicación y vaya a la dirección URL de ejemplo (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). Puede probar distintos valores para name y numtimes en la dirección URL. El sistema de enlace de modelos MVC ASP.NET asigna automáticamente los parámetros con nombre de la cadena de consulta de la barra de direcciones a los parámetros del método.

Captura de pantalla que muestra una ventana del explorador con el host local de U R L dos puntos 1 2 3 4 Hola mundo barra diagonal Nombre del signo de interrogación de bienvenida es igual a Scott y num times es igual a 4. El texto de la ventana es Hello Scott Num Times es 4.

En el ejemplo anterior, no se usa el segmento de dirección URL ( Parameters), los name parámetros y numTimes se pasan como cadenas de consulta. El signo ? (signo de interrogación) en la dirección URL anterior es un separador y siguen las cadenas de consulta. El carácter & separa las cadenas de consulta.

Reemplace el método Welcome por el código siguiente:

public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

Ejecute la aplicación y escriba la siguiente dirección URL: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott

Captura de pantalla que muestra una ventana del explorador con el host local U R L colon 1 2 3 4 barra diagonal Hola mundo barra diagonal de bienvenida 1 nombre de signo de interrogación es igual a scott. El texto de la ventana es Hello Scott ID 1.

Esta vez, el tercer segmento de dirección URL coincide con el parámetro ID. route El Welcome método action contiene un parámetro (ID) que coincide con la especificación de dirección URL en el RegisterRoutes método .

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

En ASP.NET aplicaciones MVC, es más habitual pasar parámetros como datos de ruta (como hicimos con el identificador anterior) que pasarlos como cadenas de consulta. También puede agregar una ruta para pasar los name parámetros y numtimes como datos de ruta en la dirección URL. En el archivo App_Start\RouteConfig.cs , agregue la ruta "Hello":

public class RouteConfig
{
   public static void RegisterRoutes(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );

      routes.MapRoute(
           name: "Hello",
           url: "{controller}/{action}/{name}/{id}"
       );
   }
}

Ejecute la aplicación y vaya a /localhost:XXX/HelloWorld/Welcome/Scott/3.

Captura de pantalla que muestra una ventana del explorador con el host local U R L dos puntos 1 2 3 4 de barra diagonal Hola mundo barra diagonal de bienvenida barra diagonal Scott barra diagonal 3. El texto de la ventana es Hello Scott ID 3.

Para muchas aplicaciones MVC, la ruta predeterminada funciona bien. Más adelante en este tutorial aprenderá a pasar datos mediante el enlazador de modelos y no tendrá que modificar la ruta predeterminada para ello.

En estos ejemplos, el controlador ha estado realizando la parte "VC" de MVC, es decir, el trabajo de vista y controlador. El controlador devuelve HTML directamente. Normalmente no quiere que los controladores devuelvan HTML directamente, ya que esto resulta muy complicado para el código. En su lugar, normalmente usaremos un archivo de plantilla de vista independiente para ayudar a generar la respuesta HTML. Echemos un vistazo a cómo podemos hacer esto.