URL routing con ASP.NET 4 Web Forms

(He estado usando Twitter más reciente mente para hacer post rápidos y compartir enlaces. Podéis seguirme en Twitter en http://www.twitter.com/scottgu (@scottgu es nombre en twitter).

Éste es el octavo post de una serie sobre VS 2010 y .NET 4. El post de hoy veremos una nueva característica del runtime en ASP.NET 4, consiste en usar el motor de routing de URLs en páginas ASP.NET Web Forms

¿Qué es el URL routing?

URL routing era una capacidad que introdujimos en ASP.NET 3.5 SP1, y que ya está siendo usada en aplicaciones ASP.NET MVC para exponer urls limpias, SEO web 2.0. URL routing te permiten configurar una aplicación para que acepte peticiones a URLs que no se mapean a archivos físicos. En lugar de eso, puedes usar el routing para definir URLs que tienen cierta semántica para los usuarios y que pueden ayudar a las optimizaciones de los motores de búsqueda (search-engine optimization SEO).

Por ejemplo, la url para una página tradicional que muestra las categorías de los productos puede ser de este tipo:

http://www.mysite.com/products.aspx?category=software

Usando el motor de routing de ASP.NET 4 podemos configurar la aplicación para que acepte la siguiente url y que renderize la misma información:

http://www.mysite.com/products/software

Con ASP.NET 4, una url como la anterior puede ser mapeada tanto a clases controladoras de ASP.NET MVC como a páginas Web Forms.

Mapeando urls con ASP.NET MVC

El motor de routing que se introdujo con ASP.NET 3.5 SP1 nos daba una forma muy potente de administrar las peticiones de urls. Típicamente escribimos código como parte del inicio de la aplicación para registrar/mapear urls que se corresponden con un formato url concreeto.

Aquí tenéis un ejemplo de cómo podemos usar ASP.NET MVC para mapear la url /products/software a una clase controladora llamada «Products» que tiene un método de acción llamado «Browse»:

El primer parámetro «products-browse» del método MapRoute() es un nombre «amigable» para esa ruta. El segundo parámetro «products/{category}»es el filtro URL que coincide con la url /products/software – y trata el segundo segmento de la url como un parametro llamado «category». Este parametro se le pasará al método de acción Browse de la clase ProductsController para que la procese.

Mapear URLs usando ASP.NET Web Forms

ASP.NET 4 ahora nos permite usar el motor de routing de URLs en aplicaciones ASP.NET basadas en Web Forms igual que si estuviesemos en ASP.NET MVC.

Aquí tenéis un ejemplo de cómo podemos usar el método MapPageRoute() en ASP.NET 4 para mapear la url /products/software a la página «Products.aspx» que está en el directorio raíz de la aplicación:

Los dos primeros parámetros del método MapPageRoute() son los mismos que en el caso del MapRoute(). El primer parámetro es un nombre «amigable» y el segundo especifica el formato de la ruta. El tercer parámetro, sin embargo, apunta a Products.aspx en lugar de a una clase controladora. podemos especificar parámetros adicionales al método MapPageRoute() para usar las características de «route constraints» y dar «valores por defecto a laos parámetros» igual que cuando usamos registros basados en rutas en ASP.NET MVC

Dentro de la página de Products.aspx podemos escribir un código como el siguiente que use la nueva propiedad Page.RouteData de ASP.NET 4 para obtener el parámetro «category» mapeado en el filtro /products/{category}, y enlazar la categoría de productos y mostrarlos:

Además de acceder programáticamente a estos parametros, podemos usar el nuevo control <asp:routeparameter> con cualquier control DataSource de ASP.NET para enlazar el valor declarativamente. Por ejemplo, aquí estoy usando un <asp:routeparameter> para enlazar el parámetro @category de la url:

Obtener Urls en un ASP.NET Web Form

El motor de routing de url de ASP.NET se puede usar tanto para mapear urls entrantes, como generar urls de salida usando la misma lógica de mapeo.

Por ejemplo, aquí estamos mapeando la url /products/{category} le dimos el nombre «amigable» «products-browse». Esto nos permite ahora usar el método Page.GetRouteUrl() para buscar las rutas de nuestro sistema de routing, podemos pasarle algunos parámetros y obtener la url actual a la que se mapea. Por ejemplo, el siguiente código nos devolverá el valor «/products/software»:

Podemos accer al método anterior tanto desde el code behind como en el .aspx

Ahora también tenemos el método Response.RedirectToRoute() que podemos usar para redirigir a los usuarios a una ruta (sin importar si estamos en MVC o en Web Forms) y pasarles parametros si queremos.

Manejando escenarios de Postback.

Url routing en ASP.NET 4.0 soporta escenarios de postback. El contorl <form runat=»server»> emitirá automáticamente la misma URl que hizo que se renderizara la página. Por ejemplo, si accedes a la página con la url /products/software cualquier contorl <form runat=»server»> renderizará un elemento html <form action=»/products/sofware»> al cliente – con lo que cualquier escenario de psotback que ocurra en la página mantendrá la url original.

Esto nos permite soportar urls limpias, ayuda a los motores de búsqueda y mantiene los escenarios de postback en Web Forms – y evita tener que usar los trucos necesarios hasta ahora para obtener los mismos resultados.

Resumen

ASP.NET 4 hace más sencillo conseguir urls limpias, que sean útiles para los motores de búsqueda tanto en ASP.NET MVC como en ASP.NET Web Forms (también podemos tener aplicaciones que usen los dos).

El motor de routing de URLs hace más sencillo registrar Urls de cualquier forma y formato y mapearlas al handler que queramos. como este motor se puede usar tanto para urls entrantes como salientes podemos cambiar cuando queramos los mapeos de rutas y no tendremos que modificar ninguna página o controlador para que acepte esos cambios – consiguiendo crear optimizaciones para los motores de búsqueda mucho más fácilmente.

Espero que sirva.

Scott

Traducido por: Juan María Laó Ramos.

Artículo original

0 comentarios sobre “URL routing con ASP.NET 4 Web Forms”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *