Url normal (Aspx):
http://webcelulares.com/catalogo.aspx?producto=smartphones&marca=lg&modelo=DG952
Url amigable (MVC):
http://webcelulares.com/Catalogo/Smartphones/LG/DG952
Ambas urls mostrarían la misma página, pero se puede decir que la segunda se ve mas simple o mas fácil de recordar, esto es una ventaja no solo para los usuarios sino que los buscadores que podrán indexar mejor este tipo de urls.
La ruta por defecto en MVC es dela siguiente forma:
http://servidor/Controlador/Vista
Y podemos ver y modificar esta estructura en el archivo global.asax en la función RegisterRoutes:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Analizaremos las dos lineas de código que posee esta función.
routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
Esta linea indica que debemos ignorar las urls con extensión axd, los cuales son archivos generados por el mismo punto net para el manejo de urls.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", //URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
"Default", // Route name
"{controller}/{action}/{id}", //URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
En esta linea agregamos una nueva regla de ruteo para las url. En este caso le indicamos que la ruta se llama "Default" y que posee la forma estructura controlador/accion/id, pero no solo eso, tambien nos indica que la variable id es del tipo opcional, el valor por defecto para las variables action y controller, en caso no se coloquen, son "Index" y "Home" respectivamente.
Nuevamente mediante ejemplos veremos que url coinciden con esta regla:
| URL | Compatible | Observación |
|---|---|---|
| www.midominio.com | si | Tomará los valores por defecto para controller y action |
| www.midominio.com/Catalogo | si | Tomará el valor por defecto para action |
| www.midominio.com/Catalogo /Smartphones | si | |
| www.midominio.com/Catalogo /Smartphones/LG | no | Tomará LG como valor para la variable {id} declarada como tipo entero (en el controlador), lo cual mostrará un error de tipo de dato |
| www.midominio.com/Catalogo /Smartphones/23 | si | Todas las variables poseen valor |
Podemos definir en este archivo la estructura de nuestras url, en el caso que deseemos personalizarlos, una de las acciones más comunes es modificar la "pagina de inicio", si deseamos que se redireccione a la pagina de ultimas noticias por ejemplo:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = "Noticias", action = "Inicio"}
);
}
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = "Noticias", action = "Inicio"}
);
}
Si deseamos que nuestra url sea de la estructura
http://webcelulares.com/Catalogo/Smartphones/LG/DG952
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{marca}/{modelo}",
new { controller = "Noticias", action = "Inicio"}
);
}
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{marca}/{modelo}",
new { controller = "Noticias", action = "Inicio"}
);
}
http://mibiblioteca.com/Comedia/lb-2466346
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{genero}/lb-{idLibro}",
new { controller = "Biblioteca", action = "Inicio"}
);
}
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{genero}/lb-{idLibro}",
new { controller = "Biblioteca", action = "Inicio"}
);
}
Notas:
- Siempre debemos especificar el valor de nuestro controlador y vista, sino es directamente en la estructura de la url, debemos establecer sus valores por defecto.
- Podemos establecer más de una ruta en para nuestra web, cuando ingresemos MVC verificará una por una si la url ingresada corresponde a alguna de las rutas (en el orden en que fueron registrados), solo en caso no sea compatible con ninguna se mostrará un error 404.
Eso es todo por ahora, hasta la próxima.
0 comentarios :
Publicar un comentario