Introducción

En este post aprenderás qué es el routing y los tipos que existen, así como su implementación en proyectos MVC5.

¿Qué es el Routing?

El Routing es el procedimiento que se utiliza en el entorno de desarrollo web para asignar una dirección URL a una acción de un controlador determinado, con el fin de que éste nos devuelva la vista solicitada.

Es decir, es la herramienta que nos permite asignar una URL a una página específica de nuestro sitio web para que sea accesible desde internet.

¿Cómo funciona?

Cuando insertamos una ruta en el navegador, éste realiza una petición que nos lleva a la tabla de rutas («RouteTable.Routes») que se encuentra en el archivo global.asax de nuestro proyecto, donde el routing asigna la URL  a un controlador (“controller”) y a una acción (“action”).

Por ejemplo, cuando introducimos una dirección en el explorador web, el routing, asignaría cada segmento de la url a un parámetro determinado, como se muestra en la siguiente imagen:

Asimismo, a las rutas también les podemos añadir un Id (parámetro opcional) como se muestra a continuación, pero lo veremos más adelante en el post.

¿Cómo se Configuran las Rutas?

En primer lugar, cuando creamos un proyecto MVC en Visual Studio, ya se nos da una configuración por defecto que nosotros podemos adecuar a las necesidades de nuestra aplicación.

En el archivo global.asax, que es el punto de inicio, encontraremos el método encargado de configurar las rutas, “RegisterRoutes”.

Éste método, se encuentra en la carpeta de App_Start, en la clase llamada “RouteConfig”.

Dentro del método, la llamada a “routes.MapRoute”, nos define los parámetros para configurar la ruta, que son los siguientes:

  • Nombre de la ruta.
  • URL, compuesta por el patrón que hemos visto anteriormente:
  • Valores por defecto; incluye unos parámetros predeterminados  para, en el caso de que no se proporcione ningún valor, asignarle uno.

Por ejemplo, en el caso de no proporcionar un controlador, el que está por defecto sería “Home”, en la acción sería “Index” y en el id, un parámetro opcional.

Así, escribiendo “www.ejemplo.com/Home” en la barra de direcciones, se ejecutaría la acción predeterminada “Index”, dado que ésta no se indica.

¿Cómo Personalizar una Ruta?

Para aprender a personalizar una ruta, crearemos un proyecto ASP.NET con MVC.

Una vez creado el proyecto, si lo ejecutamos podremos comprobar que nos dirige a la página principal de la aplicación dónde aparece sólo el dominio.

Pero, si escribimos en la barra de direcciones “/Home”, podremos ver cómo nos redirige a la misma página en la que estábamos. Esto se debe al mapeo de ruta por defecto que se encuentra en la clase RouteConfig.

Para ver mejor cómo funciona el envío de parámetros URL, crearemos dentro del controlador “Home” la acción “Animal”, que recibirá un parámetro String “id” que se enviará a la vista mediante un ViewBag.

A continuación, crearemos la vista donde recibiremos el ViewBag.

Si ejecutamos de nuevo la aplicación desde la vista “Animal” y añadimos en la barra de direcciones “/Perro”, equivaldría al ID de la ruta, mostrándose en la página.

Pero, ¿qué sucede si quiero añadir más parámetros a la acción?

Imaginemos que ahora queremos obtener además del id Perro, su raza.

Para visualizarlo, tenemos que añadir el parámetro String “raza” en la acción y enviarlo con otro ViewBag a la vista.

Si ejecutamos y escribimos en la barra de dirección “/Home/Animal/Perro/Mastiff”, nos dará un error 404, puesto que el nuevo parámetro no está mapeado, siendo imposible encontrarlo en la tabla de rutas.

Para que nos devuelva la raza sin necesidad de mapeo, tendríamos que utilizar query strings, añadiendo después del Id un interrogante, seguido del parámetro y un símbolo “=” junto al valor que queremos proporcionarle.

Pero ésta forma no es intuitiva para el usuario, así que vamos a crear una ruta personalizada para que sea más cómodo.

Creando la Ruta Personalizada

El primer paso es ir a la clase RouteConfig, donde vamos a crear un mapRoute nuevo para especificarle lo que necesitamos. Es importante situar el nuevo mapa antes que el que viene por defecto, ya que el sistema de detección de rutas busca una ruta válida siguiendo un orden, con lo cual devolverá la primera ruta que cumpla con lo que le indicamos.

El segundo paso, es añadirle un nombre al nuevo mapa, la url incluyendo el nuevo parámetro que queremos y los valores por defecto, donde asimismo, indicaremos como opcional el nuevo parámetro.

Ahora, si ejecutamos la aplicación y escribimos con barras la url, ésta será válida y nos devolverá la vista junto a los valores que hayamos especificado.

Pero… y si sólo quiero permitir peticiones de Perros cuyo nombre empiece por B, por ejemplo?

La solución la vamos a encontrar en las restricciones.

¿Qué son y Cómo se utilizan las Restricciones?

Cuando configuramos las rutas, podemos querer permitir sólo la entrada de parámetros de tipo número, o por ejemplo, permitir un controlador o acción específicos. Esto se consigue con las restricciones.

Para poner una restricción, iremos al método MapRoute, en el cual incluiremos un parámetro adicional para configurar la ruta, llamado “constraints”, donde indicaremos en el parámetro “raza” que sólo se admiten las que empiecen por “B”.

Si ejecutamos la aplicación y en la barra de direcciones escribimos la url anterior donde le damos el valor “Mastiff” a la raza, nos dará de nuevo el error 404.

Sin embargo, si le indicamos como raza el valor “Bulldog”, nos devolverá la vista. Así, ya tendríamos nuestra restricción.

¿Hay más Tipos de Routing?

El routing que acabamos de ver es el que está considerado como el método convencional, pero para finalizar este post de introducción, vamos a ver cómo funciona el Routing mediante Atributos.

Con este tipo de enrutamiento, mapeamos las propias rutas dentro de los controladores y las acciones, siendo la mejor opción para utilizar en aplicaciones donde se hagan pedidos, por ejemplo.

Para empezar, en la clase RouteConfig tenemos que indicar que vamos a utilizar el enrutamiento mediante Atributos, con routes.MapMvcAttributtesRoute().

A continuación, en el controlador indicaremos el prefijo que van a tener las rutas. Indicando también en cada acción la ruta con [Route] (imprescindible cuando utilizamos RoutePrefix).

En la acción que estábamos utilizando, “Animal”, indicaremos la ruta con los parámetros que va a recibir, añadiendo en id y raza un símbolo de interrogante “?”, para especificar que son parámetros opcionales.

Si ejecutamos la aplicación desde la vista “Animal”, podremos ver que hemos conseguido la misma funcionalidad de antes de una forma más sencilla.

Pero, ¿qué hay de la restricción que teníamos?

Restricciones en Attribute Routing

La restricción la podemos añadir incorporando el símbolo “:” en el parámetro y escribiendo lo que queremos permitir, siendo en este caso razas que empiecen por la letra “B”.

Esto lo conseguiríamos incluyendo regex.

Con esto, tendríamos configurado el routing de la aplicación.

Autor/a: Laura San Nicolas Sáez
Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin
Centro: Tajamar
Año académico: 2019-2020
Código: https://github.com/lstajamar/RoutingMVC
Recursos utilizados: https://devblogs.microsoft.com/aspnet/attribute-routing-in-asp-net-mvc-5/

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.