¿Por qué usar urls amigables?
Últimamente viene siendo habitual que todos los nuevos portales incorporen este tipo de rutas. En este artículo vamos a intentar tratar las urls amigables en asp.net web forms.
Estas rutas son más óptimas para el usuario, ya que permiten una navegación sencilla a través de ella y si nos interesa posicionar en google, son indispensables a día de hoy.
Funcionamiento de las urls amigables en ASP.NET
Haciendo reescritura a nivel del IIS, ésto se puede hacer a través del web.config, método menos eficaz para mi gusto.
Usando el Routing que trae el Framework de .NET 3.5 desde el SP1 y que con el Framework 4.0 hacen que su uso sea sencillo y eficaz. Estas rutas nacen con el MVC que las traen de serie.
¿Como usar urls amigables en asp.net web.forms?
Usando el Framework 4.0 simplemente debemos definir las rutas que queramos en el archivo global.asax de la siguiente manera:
voidrutasAmigables()
{
RouteTable.Routes.MapPageRoute("categoria", "categoria/{idCategoria}", "~/categoria.aspx");
}
Como vemos, la estructura de las mismas son muy sencillas y para una ruta básica sólo deberemos pasar tres parámetros:
Alias=> Un nombre cualquiera para denominar la ruta que usaremos para posteriormente llamarla.
Estructura=> Una estructura para la ruta con todos los niveles necesarios.
Ruta física=> Ruta física del archivo
Estas rutas pueden ser todo lo complejas que necesitemos para crear un árbol completo de rutas, pudiendo añadir todos los niveles necesarios, así como parámetros opcionales:
voidrutasAmigables()
{
RouteTable.Routes.MapPageRoute("categoria-detalle", "categoria/{idCategoria}", "~/categoria.aspx");
RouteTable.Routes.MapPageRoute("producto", "categoria/{idCategoria}/{producto}/{*pagina}", "~/producto.aspx");
}
En este ejemplo vemos una ruta más compleja, donde se establece un nivel que denomina a la categoría, otro con el identificador del producto y uno final que es de tipo opcional con la página de ese producto. ¿Por que opcional? si ese producto tiene por ejemplo varias páginas de comentarios, la página 1 queda por defecto siendo innecesaria su colocación en la ruta, en cambio, en el resto se pasará el parámetro con el número de la página.
Posteriormente habrá que lanzarlas en el Application_Start para que se inicialicen en la carga de la página:
voidApplication_Start(object sender, EventArgs e)
{
rutasAmigables();
}
Su uso es muy sencillo. Usando los ejemplos anteriores, vamos a llamar a la página de detalle de una categoría y colocarla en un Hyperlink:
lnkCategoria1.NavigateUrl = Page.GetRouteUrl("categoria-detalle", new { idCategoria=“varios” });
lnkProducto1.NavigateUrl = Page.GetRouteUrl("categoria-detalle", new { idCategoria=“varios”,idCategoria=“producto1” });
Llamamos a la ruta y pasamos el id de la categoría como parámetro, el resultado será algo así:
Para la recogida del valor simplemente en vez de usar el QueryString de la rutas normales usaremos:
String id_categoria = RouteData.Values["idCategoria"].ToString();
String producto= RouteData.Values["idCategoria"].ToString();
¿Ventajas de las rutas amigables?
Aparte de la anteriormente descritas, si en un momento dado se deben cambiar las rutas por cualquier motivo, sólo tendremos que acceder al archivo global.asax y cambiarlas. De otra manera, habría que ir cambiando los nombres de carpetas y/o archivos en todo el proyecto