Ejemplo paso a paso de Routing en ASP.NET 4.0
Otra de las características soportadas por ASP.NET 4.0 ,y de las que se habló en el TEchdays 2009, las cuales dije que iba a postear más en detalle, es del Routing, lo bueno es que en la versión de ASP.NET 4.0 es mucho más sencillo de utilizar que en versiones anteriores. La idea principal es que configuramos nuestra aplicación para aceptar request de URLs que no se corresponden a un archivo físico en nuestro servidor. En su lugar, podemos utilizar el enrutamiento para definir direcciones URL que sean significativas para los usuarios , al estilo Wikipedia por ejemplo, y que pueden ayudar con la optimización de los motores de búsqueda (SEO) . Por ejemplo, la URL de una página que muestra los libros en una aplicación existente podría ser similar al ejemplo siguiente:
http://website/libros.aspx?libroid=param
Usando el ruteo, podemos configurar nuestra aplicación para que la siguiente URL sea equivalente:
http://website/libro/nombre/edicion
Obviamente el segundo link es mucho más amigable al usuario, de hecho es por eso que se le llaman Friendly Urls, con una inspección rápida el usuario puede saber de que trata dicha URL.
Si bien este enrutamiento esta disponible en ASP.NET 3.5 SP1, ASP.NET 4.0 incluye unas características que lo hacen más fácil de usar, como veremos en el siguiente ejemplo:
Paso 1 - Crear la Referencia
A System.Web.Routing
Paso 2 – Agregar lo necesario a nuestro Global.asax ( y sí!, en vb.net! jejej)
<%@ Application Language="VB" %>
<%@ Import Namespace="System.Web.Routing" %>
<script runat="server">
Public Sub RegistraRuta()
RouteTable.Routes.MapPageRoute("Libro", _
"libreria/{nombre}/{*edicion}", _
"~/libros.aspx")
End Sub
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RegistraRuta()
End Sub
Pero detengámonos un poco en RegistraRuta, en donde MapPageRoute recibe como parámetros el nombre del esta llave de ruta (keyRoute), la ruta, y la página física a la que será referenciada, no es necesario que la página se llame igual que el prefijo del segundo parámetro,también es posible, si así lo deseamos, pasar como parámetro al método RegistrarRuta una colección RouteCollection. El asterisco al lado del parámetro edición indica que es opcional.
Paso 3 – Recibir los Parámetros
| Como se ve, mi aplicación es bastante sencilla, recuerda que debemos tener una página que se llame libros.aspx ya que definimos en el mapa de rutas que todo lo que “entra” por librería, se va a mapear a la pagina libros.aspx. Ahora necesitamos recibir este parámetro, para esto ocupamos en el evento Page_Load de nuestra página: Page.RouteData.Values("param").ToString |
En nuestro caso:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
lb_nombreLibro.Text = Page.RouteData.Values("nombre").ToString
If Not Page.RouteData.Values("edicion") Is Nothing Then
lb_edicionLibro.Text = Page.RouteData.Values("edicion").ToString
End If
End Sub
Como podrás ver, tengo dos labels que los voy a setear con los parámetros del ruteo. La página tiene la siguiente forma.

Y al ejecutar la URL en nuestro Browser:
http://localhost:23631/URLRouting/libreria/Necronomicon/666

Estamos ya en condiciones de utilizar nuestro ruteo, muy fácil.
Pregunta: ¿Y si estoy utilizando un DataSource con parámetros de entrada mediante URL?
Podemos setear nuestros DataSource para que reciban desde el parámetro proveniente del routeo, de hecho si agregamos una base de datos, luego una grilla y creamos un sqldatasource, cuando seleccionamos "Where…” para configurar el subconjunto de datos, veremos la opción Route (la última de la lista) y además podemos setear el RouteKey y su valor por defecto:

Luego le damos agregar, lo que nos genera en nuestro código declarativo:
<SelectParameters>
<asp:RouteParameter Name="NombreLibro" RouteKey="nombre" Type="String" />
</SelectParameters>
Probando… Funciona impecable :D
Espero que este tutorial te haya servido para introducirte a las nuevas características de ASP.NET 4.0
Si quieres el ejemplo:
Descárgalo aquí
Saludos,
Gonzalo