Introducción FriendlyUrls en ASP.NET

La optimización del Search Engine es uno de los factores clave para tu sitio. Si vas a gastar millones de pesos en hacer que tu página web se vea bien y libre de errores, también debes tener en cuenta, que es posible que los motores de búsqueda, no pelen tu sitio web debido a las URL. Por ejemplo, tienes un carrito de compras en asp.net y no se ha optimizado su URL. La URL se verá como se ve a continuación.
www.carritocompras.com/Product.aspx?Category=1&Page=1
Hay una nueva característica en ASP.NET que nos facilita las URL amigables y es muy sencillo de implementar. Damian Edwards y Levi Broderick han llegado con una solución bastante impresionante sobre la base de la "Smarty Routes" idea original de Eilon Lipton y el resultado ha sido las FriendlyUrls.
Puedes descargar la versión más reciente de ASP.NET Friendly desde la siguiente URL.
http://aspnetfriendlyurls.codeplex.com/
Si está utilizando NuGet puedes descargarla del siguiente enlace.
https://nuget.org/packages/Microsoft.AspNet.FriendlyUrls
Bueno veremos el siguiente ejemplo. Abra Visual Studio y Archivo | Nuevo proyecto | New Forms ASP.NET Web Application. Ahora, desde la consola de administrador de paquetes o desde Administrar paquetes NuGet, instale Microsoft.AspNet.FriendlyUrls.
1. Crea un módulo que se llame RouteConfig con el siguiente código.
Imports Microsoft.VisualBasic Imports System.Collections.Generic Imports System.Web.Routing Imports Microsoft.AspNet.FriendlyUrls Public Module RouteConfig Sub RegisterRoutes(ByVal routes As RouteCollection) routes.EnableFriendlyUrls() End Sub End Module
2. Después abre tu Global.asax.vb y en Application_Start agrega RouteConfig.RegisterRoutes(RouteTable.Routes), esto para asegurarnos de cargar la ruta FriendlyUrls, debe quedar como se muestra a continuación:
<%@ Application Language="VB" %> <%@ Import Namespace="System.Web.Routing" %> <script runat="server"> Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' Code that runs on application startup RouteConfig.RegisterRoutes(RouteTable.Routes) End Sub Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) ' Code that runs on application shutdown End Sub Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) ' Code that runs when an unhandled error occurs End Sub Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) ' Code that runs when a new session is started End Sub Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) ' Code that runs when a session ends. ' Note: The Session_End event is raised only when the sessionstate mode ' is set to InProc in the Web.config file. If session mode is set to StateServer ' or SQLServer, the event is not raised. End Sub </script>
Pero, ¿Cómo puedo obtener los valores de la URL? Estoy acostumbrado a Request.QueryString y Request.Form, pero ¿cómo generar las URL y cómo obtengo los parámetros?
3. Agrega una página que se llame default.aspx, destino.aspx y categoría.aspx, agrega el código html como se muestra a continuación.
Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <nav> <ul id="menu"> <li><a id="A1" runat="server" href="~/">Home</a></li> <li><a id="A2" runat="server" href="~/Destino">Destino</a></li> </ul> </nav> </div> </form> </body> </html>
Destino.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Destino.aspx.vb" Inherits="Destino" %> <%@ Import Namespace="Microsoft.AspNet.FriendlyUrls" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <ul id="menu"> <li><a id="A1" runat="server" href="~/Default">Home</a></li> <li><a id="A2" runat="server" href="~/Destino">Destino</a></li> <li><a href="<%: FriendlyUrl.Href("~/Categoria", "Carros", "20")%>">Parametro1</a></li> </ul> </div> </form> </body> </html>
Categoria.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Categoria.aspx.vb" Inherits="Categoria" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblParametro" runat="server" Text=""></asp:Label> </div> </form> </body> </html>
4. Para recuperar el parámetro que se regresa de la página destino ponemos el siguiente código en categoria.aspx.vb
Imports Microsoft.AspNet.FriendlyUrls Partial Class Categoria Inherits System.Web.UI.Page Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load Dim UrlSegments As IList(Of String) = Request.GetFriendlyUrlSegments() Dim parametro As String = "" For i = 0 To UrlSegments.Count - 1 parametro = UrlSegments(i).ToString Next lblParametro.Text = parametro End Sub End Class
Y listo cuando navegues veras tus URL optimizadas, pruébalo a ver que te parece y nos comentas los resultados, la navegación debería ser como se ve en las imágenes.