Crear direcciones URL legibles en sitios de ASP.NET Web Pages (Razor)

Por Tom FitzMacken

En este artículo se describe el enrutamiento en un sitio web de ASP.NET Web Pages (Razor) y cómo esto le permite usar direcciones URL que son más legibles y mejores para SEO.

Temas que se abordarán:

  • Cómo ASP.NET usa el enrutamiento para permitirle usar direcciones URL más legibles y buscables.

Versiones de software usadas en el tutorial

  • ASP.NET Web Pages (Razor) 3

Este tutorial también funciona con ASP.NET Web Pages 2.

Acerca del enrutamiento

Las direcciones URL de las páginas del sitio pueden tener un impacto en el funcionamiento del sitio. Una dirección URL que sea "fácil" puede facilitar a los usuarios usar el sitio. También puede ayudar con la optimización del motor de búsqueda (SEO) para el sitio. ASP.NET sitios web incluyen la capacidad de usar direcciones URL fáciles de usar automáticamente.

ASP.NET permite crear direcciones URL significativas que describen las acciones del usuario en lugar de simplemente apuntar a un archivo en el servidor. Tenga en cuenta estas direcciones URL para un blog ficticio:

  • http://www.contoso.com/Blog/blog.cshtml?categories=hardware
  • http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30

Compare esas direcciones URL con las siguientes:

  • http://www.contoso.com/Blog/categories/hardware/
  • http://www.contoso.com/Blog/2009/November

En el primer par, un usuario tendría que saber que el blog se muestra mediante la página blog.cshtml y, a continuación, tendría que construir una cadena de consulta que obtenga la categoría o el intervalo de fechas correctos. El segundo conjunto de ejemplos es mucho más fácil de comprender y crear.

Las direcciones URL del primer ejemplo también apuntan directamente a un archivo específico (blog.cshtml). Si por alguna razón el blog se movió a otra carpeta del servidor o si el blog se reescribiera para usar una página diferente, los vínculos serían incorrectos. El segundo conjunto de direcciones URL no apunta a una página específica, por lo que incluso si cambia la implementación del blog o la ubicación, las direcciones URL seguirán siendo válidas.

En ASP.NET páginas web, puede crear direcciones URL más sencillas como las de los ejemplos anteriores porque ASP.NET usa el enrutamiento. El enrutamiento crea una asignación lógica desde una dirección URL a una página (o páginas) que pueden cumplir la solicitud. Dado que la asignación es lógica (no física, para un archivo específico), el enrutamiento proporciona una gran flexibilidad en la forma en que define las direcciones URL del sitio.

Funcionamiento del enrutamiento

Cuando ASP.NET procesa una solicitud, lee la dirección URL para determinar cómo enrutarla. ASP.NET intenta coincidir con segmentos individuales de la dirección URL en los archivos del disco, pasando de izquierda a derecha. Si hay una coincidencia, todo lo que queda en la dirección URL se pasa a la página como información de ruta de acceso.

Imagine que alguien realiza una solicitud con esta dirección URL:

http://www.contoso.com/a/b/c

La búsqueda es similar a la siguiente:

  1. ¿Hay un archivo con la ruta de acceso y el nombre de /a/b/c.cshtml? Si es así, ejecute esa página y no pase información a ella. De lo contrario...
  2. ¿Hay un archivo con la ruta de acceso y el nombre de /a/b.cshtml? Si es así, ejecute esa página y pase el valor c a ella. Otherwise
  3. ¿Hay un archivo con la ruta de acceso y el nombre de /a.cshtml? Si es así, ejecute esa página y pase el valor b/c a ella.

Si la búsqueda no encontró coincidencias exactas para los archivos .cshtml en sus carpetas especificadas, ASP.NET continúa buscando estos archivos a su vez:

  1. /a/b/c/default.cshtml (sin información de ruta de acceso).
  2. /a/b/c/index.cshtml (sin información de ruta de acceso).

Nota:

Para ser claros, las solicitudes de páginas específicas (es decir, las solicitudes que incluyen la extensión de nombre de archivo .cshtml) funcionan de la manera esperada. Una solicitud como http://www.contoso.com/a/b.cshtml ejecutará la página b.cshtml.

Dentro de una página, puede obtener la información de ruta de acceso a través de la propiedad de UrlData la página, que es un diccionario. Imagine que tiene un archivo denominado ViewCustomers.cshtml y su sitio obtiene esta solicitud:

http://mysite.com/myWebSite/ViewCustomers/1000

Como se describe en las reglas anteriores, la solicitud irá a la página. Dentro de la página, puede usar un código como el siguiente para obtener y mostrar la información de la ruta de acceso (en este caso, el valor "1000"):

<!DOCTYPE html>
<html>
    <head>
        <title>URLData</title>
    </head>
    <body>
      Customer ID: @UrlData[0].ToString()
    </body>
</html>

Nota:

Dado que el enrutamiento no implica nombres de archivo completos, puede haber ambigüedad si tiene páginas con el mismo nombre pero extensiones de nombre de archivo diferentes (por ejemplo, MyPage.cshtml y MyPage.html). Para evitar problemas con el enrutamiento, es mejor asegurarse de que no tiene páginas en su sitio cuyos nombres solo difieren en su extensión.

Recursos adicionales

WebMatrix: direcciones URL, UrlData y Enrutamiento para SEO. Esta entrada de blog de Mike Brind proporciona algunos detalles adicionales sobre cómo funciona el enrutamiento en ASP.NET Páginas web.