Páginas

sábado, 21 de marzo de 2015

ASP.NET Web Forms URLs Amigables

Como aún Web Forms no está muerto y siempre queda uno que otro proyecto que mantener, o por que todavía no migramos completamente a MVC .NET, etc., vamos a hacer un ejercicio para tener en nuestro sitio las urls mas amigables y fáciles de recordar por ejemplo: http://misitio.com/default.

Lo que tenemos que hacer primero es referenciar en nuestro proyecto el assembly System.Web.Routing.





Nuestras rutas personalizadas van a estar configuradas en un objeto del tipo RouteCollection y para esto vamos a hacer lo siguiente: 



  1. Agregar en la carpeta APP_Code una clase llamada RoutesConfig con un metodo estático que recibe un  RouteCollection. Recorda darle click derecho al archivo agregado para contruir la clase y en la propiedades setearle Acción de compilación: Compilación.
  2. Ahora abrimos el global.asax y en el evento Application_Start llamamos a esta clase con su metodo estatico y le pasamos la tabla de rutas contenida en: System.Web.Routing.RouteTable.Routes.



Empecemos por una ruta básica, vamos a usar el objeto routes pasado como parámetro y su método MapPageRoute que acepta lo siguiente: 
  1. Nombre de la ruta.
  2. Url amigable que usaremos para navegar 
  3. Ruta física de la pagina destino. 
Entonces nos queda por ejemplo para mapear la pagina Default.aspx:
    routes.MapPageRoute("Default" , "Default", "~/Default.aspx"); 
//recorda que ~ significa la raíz de la estructura de directorios del proyecto. 




Una vez hecho esto podemos probar navegando a http://localhost/Default depurando el proyecto. Al final del post esta el proyecto con los ejemplos para descargar.


   
Algo interesante de todo esto es que los parámetros se pueden pasar como parte de la url en cambio del clásico query string haciendo más fácil recordar o navegar hacia una pagina sin necesidad de navegar por todo el sitio para llegar a destino: http://localhost/autos/rojos a cambio de http://localhost/autos.aspx?color=rojo.
Entonces configuramos la ruta de la siguiente forma: 

routes.MapPageRoute("NombreRuta", "Url/{param1}" , false, new RouteRouteValueDictionary() { {"param1" , "valor"}} ); //el diccionario esta inicializado con su forma abreviada para hacerlo en una sola linea.

Donde ponemos false es para indicar si se desean hacer chequeos de seguridad en este caso no lo usamos.
RouteRouteValueDictionary es una colección clave/valor y lo pasamos para establecer el valor por defecto del parámetro.





A cambio del Request.QueryString, los parámetros los capturamos con el método RouteValues del objeto Page :  Page.RouteData.Values["param1"]


  
¿Y como navegamos desde el código con esta forma de rutas ? El clásico Response.Redirect lo dejamos de lado para cambiarlo por Response.RedirectToRoute obviamente acepta parámetros y ponemos un ejemplo tomando la ruta configurada en el paso anterior.

 Response.RedirectToRoute("Informacion", new { param1 = "christian"}); 

El argumento new { param1 = "christian"} es un array de object donde indicamos la combinacion nombreParametroIndicado = valor, entonces si tendriamos dos parámetros donde el segundo se llama param2 seria new { param1 = "christian", param2 = "DC" } y asi sucesivamente.
Un tip muy útil y que nunca esta de mas es agregar una ruta para cuando la url ingresada no coincide en absoluto con algo de nuestro sitio, el clásico HTTP Status Code 404. Para esto agregamos una ruta con la url de la siguiente forma "{*url}" y la página a mapear es una que indiquemos nosotros en este caso "~/Error.aspx". 
Un dato muy importante es que esta ruta debe ser agregada al final de todas las demás rutas

 routes.MapPageRoute("404-ErrorPage", "{*url}", "~/Error.aspx");





En resumen esta forma de manejar las rutas en nuestro proyecto es muy recomendable por todos los beneficios que trae a simple vista como fácil de recordarlas, fácil manejo, intuitivas y mas prolijas. Me faltan explicar 2 cosas mas como el patrón query values y las constraints pero lo dejo para investigar en el ejemplo para descargar. 


Espero que les resulte útil. 


El cerebro es diferente de todos los otros órganos del cuerpo. Mientras que el hígado y los riñones se gastan luego de ciertos años de uso, el cerebro se afila cuanto más se usa. En realidad, mejora con el uso.


RICHARD RESTAK




       

Dejá un comentario:


No hay comentarios:

Publicar un comentario