ASP.NET MVC 5 – Attribute routing II

En el post anterior prometí ampliar un poco más el tema del routing por atributos. En este caso vamos a hablar de parámetros opcionales, valores por default, prefijos y rutas por default.

Parámetros opcionales y Valores por default

Definir que un parámetro es opcional es tan simple como poner el signo de interrogación “?” al final del nombre del mismo. En el siguiente ejemplo estamos diciendo que el parámetro value es opcional:

Parámetro Opcional

Parámetro Opcional

Para definir el valor por default de un parámetro simplemente agregamos al final del nombre el signo “=” y a continuación el valor. En el siguiente ejemplo el parámetro value tiene como valor por defecto el texto “Valor por default”:

Valor por default

Valor por default

Podemos probar lo anterior utilizando las siguientes URIs:

Prefijos

Algo que podemos definir para un conjunto de rutas es un prefijo. Por ejemplo, si todas las rutas del controlador ProductsController van a comenzar con el prefijo “productos”, podemos especificar – a nivel controlador – el mismo valor utilizando el atributo [RoutePrefix] :

Prefijos

Prefijos

Con esto evitamos tener que agregar el prefijo “producto” en cada atributo de acción. En caso de que queramos omitir el prefijo en algún método de acción, simplemente debemos agregar el tilde “~” en la definición de la ruta, un ejemplo seria el siguiente: “~/principal”.

Rutas por default

Otra cosa que podemos hacer es definir una ruta por default. Para esto debemos aplicar el atributo [Route] en el controlador y especificarle la acción que deseamos por default utilizando para ello el parámetro action. En el ejemplo estamos diciendo que la ruta por default es la acción Default – chan! -:

Default Route

Default Route

Importante! La acción que definamos por default no debe tener el atributo [Route] (caso contrario este atributo sobre-escribe el del controlador pisando esta regla).

Espero que les sea de utilidad!

En el próximo post vamos a ver algunas características por demás interesantes como restricciones y áreas.

Anuncios

ASP.NET MVC 5 – Attribute routing

Hasta ahora el mecanismo de enrutamiento de ASP.NET MVC  establecía que una URI coincidía con una acción – dicho mecanismo es conocido como enrutamiento basado en convención-. Una de las novedades de ASP.NET MVC 5 es un nuevo mecanismo de routing basado en atributos – Attribute Routing – el cual utiliza atributos para definir el ruteo, y nos permite tener mucho mas control sobre las URI de nuestra web.

Importante! En ASP.NET MVC 5 ambos mecanismos de routing son soportados y es posible combinar el uso de ambas técnicas dentro del mismo proyecto.

Veamos un ejemplo para ver toda la potencia del routing basado en atributos. Imaginemos que tenemos una página web de venta de productos y queremos el detalle de un producto tenga una URL similar a la siguiente:

http://localhost:8080/productos/1/Televisor 100 pulgadas

Y que se rutee a la siguiente acción:

ProductsController.Detail(int productId);

Como pueden ver en este caso hay varias cuestiones que “complican” el ruteo basado en convenciones. En primer lugar estoy usando en la URI el nombre productos para hacer referencia al controlador Products (esto suponiendo que mi sitio esta orientado al publico latinoamericano). Por otro lado en ningún momento hacemos referencia al nombre de la acciónDetail -. Y por último el titulo del producto es algo meramente descriptivo y mi acción no va hacer nada con él – al menos en este caso -.

Si bien esto no es imposible de hacerlo utilizando convention-based routing, si es cierto que se puede tornar molesto cuando debemos hacerlo repetidas veces:

Definición utilizando convention-based routing

Definición utilizando convention-based routing

Ahora trabajemos utilizando atributos! Lo primero que debemos hacer para habilitar esta feature es invocar a la función MapMvcAttributeRoutes en el proceso de registración del routing:

Habilitando Attribute Routing

Habilitando Attribute Routing

Lo que queda ahora es simplemente definir el routing por medio del atributo [Route]:

Definiendo el ruteo por medio de atributos

Definiendo el ruteo por medio de atributos

Simple, no?

Pero eso no es todo, también es posible definir prefijos, rutas por default, restricciones y áreas (temas que veremos es los siguientes posts).

Espero que les sea de utilidad!