Introducción

Routing permite definir un patrón de dirección URL que mapee al manejador (handler) de la petición. En MVC los encargados de manejar dichas peticiones son los métodos Action de la clase Controller.

ASP.NET introdujo el routing para eliminar la necesidad de mapear cada URL a un fichero físico. En web forms cada ruta tiene que estar asociada a un archivo, en MVC no.

Configurar Rutas

Para configurarlas se hace en la clase RouteConfig dentro de la carpeta App_Start, se utiliza el método MapRoute() de la clase RouteCollection. Todas las aplicaciones MVC traen configurada 1 ruta por defecto.

Los defaults especifican qué controlador, acción, o id se utilizarán en caso de no existir en la petición. En el caso de llamar al dominio sin patrón especifico, nos redirigirá a la ruta por defecto: «/home/index»

p2

 

 

Patrón URL

El patrón se especifica después del nombre de dominio.

p3

A continuación, se muestra una tabla con los resultados de búsqueda para cada URL

p4

Restricciones

A la hora de configurar rutas se pueden establecer restricciones, como que el Id tenga que ser numérico. Para ello se utiliza la palabra constraints en el mapa de ruta

p5

Ejemplo práctico

  • Primero, crearemos un proyecto ASP.NET con MVC incluido
e1
  • A continuación, ejecutaremos la aplicación para comprobar cómo funciona el mapeo de ruta que trae por defecto.
e2
  • Como podemos observar en la URL solo muestra el nombre del dominio y aún así, nos está mostrando la vista Index de HomeController. Esto se debe al mapeo que viene por defecto en RouteConfig.cs en la carpeta App_Start.
e4
  • En el mapeo «Default», comprobamos que el esquema de ruta que estipula es {controller}{action}{id}, y que si no se le indica controller tomará por defecto el HomeController, y en caso de no mandarle Action en la petición, usará Index por defecto. También asigna al id el atributo de opcional, por lo tanto no es necesario.
  • A continuación, vamos a ver el funcionamiento del envío de parámetros por URL. Para ello crearemos un ActionResult «Test» que recibe un parámetro String «id», y lo manda a la vista en un ViewBag.
e5
  • Crearemos la vista, test y recibiré el ViewBag en un h3 para mostrarlo en pantalla.
e6
  • Si escribimos en la barra de dirección el id, siguiendo el esquema de ruta que estaba programado por defecto en el RouteConfig
  • {controlador}/{accion}/{id}=Home/Test/43
  • Veremos que, efectivamente se muestra el id en la página.
e7
  • Si complicamos el asunto, y al ActionResult le pasamos otros 2 parámetros más: producto, precio.
e8
  • Si seguimos la misma lógica de antes y pasamos el resto de parámetros igual que el id. Nos toparemos con un error 404 Not Found. Como vimos en la teoría al no estar mapeo no encuentra en su tabla de rutas una respuesta para esa petición.
e9
  • Si queremos pasar mas atributos a parte del id, habrá que hacerlo por medio de query strings. para ello escribiremos después del id un símbolo de interrogación «?» seguido del nombre del parámetro y su valor. Si es mas de uno, concatenarlos con el símbolo «&».
e10
  • De esta manera lograremos el objetivo, pero hay que tener cierto conocimiento de programación. Si quiero que cualquier usuario sea capaz de usar la barra de dirección de una manera mas intuitiva, basta con mapear la lógica a seguir en un nuevo mapa de ruta.
e11
  • Es importante tener en cuenta que cuando indicamos varios mapas de ruta, el menos específico irá abajo del todo. Por tanto el default tendrá que ser el último.
  • Crearé encima del Default un nuevo mapa personalizado, en el que mi patrón de ruta será controller-action-id-producto-precio.
  • De esta manera, cuando busque Home/Test/45/zapato/60 será una URL válida para mi aplicación, y me mostrará los parámetros por pantalla.
e12

Enlace a vídeo


Autor: Jesús Bereguiain Porras

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2018-2019

Código:https://github.com/jberetajamar/routingmvc

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.