Información general sobre el enrutamiento de ASP.NET MVC (VB)

por Stephen Walther

En este tutorial, Stephen Walther muestra cómo el marco ASP.NET MVC asigna las solicitudes del explorador a las acciones del controlador.

En este tutorial, se le presenta una característica importante de cada aplicación ASP.NET MVC denominada enrutamiento de ASP.NET. El módulo de enrutamiento de ASP.NET se encarga de asignar las solicitudes de explorador entrantes a acciones de controlador de MVC concretas. Al final de este tutorial, comprenderá cómo la tabla de enrutamiento estándar asigna las solicitudes a las acciones del controlador.

Uso de la tabla de enrutamiento predeterminada

Al crear una nueva aplicación ASP.NET MVC, la aplicación ya está configurada para usar el enrutamiento de ASP.NET. El enrutamiento de ASP.NET está configurado en dos lugares.

En primer lugar, está habilitado en el archivo de configuración web de la aplicación (archivo Web.config). Hay cuatro secciones en el archivo de configuración relevantes para el enrutamiento: la sección system.web.httpModules, la sección system.web.httpHandlers, la sección system.webserver.modules y la sección system.webserver.handlers. Tenga cuidado de no eliminar estas secciones porque sin ellas, el enrutamiento no funcionará.

En segundo lugar, y lo más importante, se crea una tabla de enrutamiento en el archivo Global.asax de la aplicación. El archivo Global.asax es un archivo especial que contiene controladores de eventos para los eventos de ciclo de vida de la aplicación ASP.NET. La tabla de enrutamiento se crea durante el evento Application Start.

El archivo de la lista 1 contiene el archivo Global.asax predeterminado para una aplicación ASP.NET MVC.

Lista 1 - Global.asax.vb

' Note: For instructions on enabling IIS6 or IIS7 classic mode, 
' visit https://go.microsoft.com/?LinkId=9394802

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        ' MapRoute takes the following parameters, in order:
        ' (1) Route name
        ' (2) URL with parameters
        ' (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

Cuando se inicia una aplicación MVC por primera vez, se llama al método Application_Start(). Este método, a su vez, llama al método RegisterRoutes(). El método RegisterRoutes() crea la tabla de enrutamiento.

La tabla de enrutamiento predeterminada contiene una sola ruta (denominada Default). La ruta predeterminada asigna el primer segmento de una dirección URL a un nombre de controlador; el segundo segmento de una dirección URL, a una acción de controlador y el tercer segmento, a un parámetro denominado id.

Imagine que escribe la siguiente dirección URL en la barra de direcciones del explorador web:

/Home/Index/3

La ruta predeterminada asigna esta dirección URL a los parámetros siguientes:

  • controller = Home

  • action = Index

  • id = 3

Al solicitar la dirección URL /Home/Index/3, se ejecuta el código siguiente:

HomeController.Index(3)

La ruta predeterminada incluye valores predeterminados para los tres parámetros. Si no proporciona un controlador, el parámetro del controlador tiene como valor predeterminado el valor Home. Si no proporciona una acción, el parámetro action se establece de forma predeterminada en el valor Index. Por último, si no proporciona un identificador, el parámetro id tiene como valor predeterminado una cadena vacía.

Echemos un vistazo a algunos ejemplos de cómo la ruta predeterminada asigna las direcciones URL a las acciones del controlador. Imagine que escribe la siguiente dirección URL en la barra de direcciones del explorador:

/Home

Debido a los valores predeterminados de los parámetros de ruta predeterminados, escribir esta dirección URL hará que se llame al método Index() de la clase HomeController de la lista 2.

Lista 2 - HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As String)
        Return View()
    End Function

End Class

En la lista 2, la clase HomeController incluye un método denominado Index() que acepta un único parámetro denominado Id. La dirección URL /Home hace que se llame al método Index() con el valor Nothing como valor del parámetro Id.

Debido a la forma en que el marco de MVC invoca acciones de controlador, la dirección URL /Home también coincide con el método Index() de la clase HomeController en la lista 3.

Lista 3: HomeController.vb (acción Index sin parámetro)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

El método Index() de la lista 3 no acepta ningún parámetro. La dirección URL /Home hará que se llame a este método Index(). La dirección URL /Home/Index/3 también invoca este método (se omite el identificador).

La dirección URL /Home también coincide con el método Index() de la clase HomeController en la lista 4.

Lista 4: HomeController.vb (acción Index con parámetro que admite un valor NULL)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id? As Integer)
        Return View()
    End Function

End Class

En la lista 4, el método Index() tiene un parámetro Integer. Dado que el parámetro es un parámetro que admite un valor NULL (puede tener el valor Nothing), se puede llamar a Index() sin generar un error.

Por último, invocar el método Index() en la lista 5 con la dirección URL /Home provoca una excepción, ya que el parámetro Id no es un parámetro que admite un valor NULL. Si intenta invocar el método Index(), obtendrá el error mostrado en la figura 1.

Lista 5: HomeController.vb (acción Index con el parámetro Id)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As Integer)
        Return View()
    End Function

End Class

Invoking a controller action that expects a parameter value

Figura 01: Invocar una acción de controlador que espera un valor de parámetro (haga clic para ver la imagen a tamaño completo)

La dirección URL /Home/Index/3, por otro lado, funciona bien con la acción de controlador de Index en la lista 5. La solicitud /Home/Index/3 hace que se llame al método Index() con un parámetro Id que tiene el valor 3.

Resumen

El objetivo de este tutorial era proporcionarle una breve introducción al enrutamiento de ASP.NET. Hemos examinado la tabla de enrutamiento predeterminada que se obtiene con una nueva aplicación ASP.NET MVC. Hemos aprendido cómo el enrutamiento predeterminado asigna las direcciones URL a las acciones del controlador.