Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
El enrutamiento ASP.NET permite administrar solicitudes URL que no se asignan a un archivo físico en la aplicación web. De forma predeterminada, el enrutamiento ASP.NET está habilitado en una aplicación ASP.NET de datos dinámicos o en el marco MVC, pero no está habilitado en los proyectos de sitio web ASP.NET. Por consiguiente, para utilizar el enrutamiento en un sitio web ASP.NET, debe realizar los pasos necesarios para habilitarlo.
Para habilitar el enrutamiento, debe cambiar el archivo de configuración de la aplicación para registrar el ensamblado de enrutamiento y para agregar la clase UrlRoutingModule como un módulo. También debe crear un controlador personalizado para la ruta. El controlador implementa la interfaz IRouteHandler y crea una instancia del formulario Web Forms (el archivo .aspx) que será el extremo real de la solicitud. Finalmente, debe definir las rutas que atiende el controlador. En este tema se muestra cómo se realizan estos pasos.
Vea un vídeo que muestra esta característica.
Para configurar un proyecto de sitio de web ASP.NET para el enrutamiento
En el archivo Web.config de la aplicación, agregue el ensamblado de enrutamiento ASP.NET al elemento assemblies, como se muestra en el ejemplo siguiente:
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>Si la aplicación se ejecuta bajo IIS 6.0 o IIS 7.0 en modo clásico, agregue la clase UrlRoutingModule al elemento httpModules, como se muestra en el ejemplo siguiente:
<httpModules> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules>Si la aplicación se ejecuta bajo IIS 7.0 en modo integrado, agregue la clase UrlRoutingModule al elemento modules, como se muestra en el ejemplo siguiente:
<system.webServer> <modules> <remove name="UrlRoutingModule" /> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </modules> </system.webServer>Si la aplicación se ejecuta bajo IIS 7.0 en modo integrado, agregue la clase UrlRoutingHandler al elemento handlers, como se muestra en el ejemplo siguiente:
<system.webServer> <handlers> <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </handlers> </system.webServer>
Para crear el controlador
Cree una clase que implemente la interfaz IRouteHandler.
Implemente el método GetHttpHandler. Para especificar un determinado formulario Web Forms (archivo .aspx) como el extremo de la solicitud, devuelva una instancia de dicho formulario a partir del método GetHttpHandler.
En el siguiente ejemplo se muestra una clase denominada CustomRouteHandler que implementa la interfaz IRouteHandler. El método GetHttpHandler llama al método CreateInstanceFromVirtualPath para crear una instancia del formulario Web Forms especificado. Esta instancia se devuelve como el extremo de la solicitud.
Public Class CustomRouteHandler Implements IRouteHandler Private _virtualPath As String Public Sub New(ByVal vPath As String) _virtualPath = vPath End Sub Public Property VirtualPath() As String Get Return _virtualPath End Get Private Set(ByVal value As String) _virtualPath = value End Set End Property Public Function GetHttpHandler(ByVal requestContext _ As System.Web.Routing.RequestContext) _ As System.Web.IHttpHandler _ Implements System.Web.Routing.IRouteHandler.GetHttpHandler Dim redirectPage As IHttpHandler redirectPage = _ BuildManager.CreateInstanceFromVirtualPath(VirtualPath, _ GetType(Page)) Return redirectPage End Function End Classpublic class CustomRouteHandler : IRouteHandler { public CustomRouteHandler(string virtualPath) { this.VirtualPath = virtualPath; } public string VirtualPath { get; private set; } public IHttpHandler GetHttpHandler(RequestContext requestContext) { var page = BuildManager.CreateInstanceFromVirtualPath (VirtualPath, typeof(Page)) as IHttpHandler; return page; } }
Para registrar el controlador personalizado
Si la aplicación web aún no tiene un archivo Global.asax, agréguelo.
Agregue una directiva al archivo Global.asax que importe el espacio de nombres System.Web.Routing, como se muestra en el ejemplo siguiente:
<%@ Import Namespace="System.Web.Routing" %>Cree un método en el archivo Global.asax que agregue definiciones de ruta a la propiedad Routes de la clase RouteTable.
Llame al método desde el controlador de eventos Application_Start.
El ejemplo siguiente muestra un método que registra una clase denominada CustomRouteHandler como el controlador de las solicitudes que coinciden con bikes/sale.
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) RegisterRoutes(RouteTable.Routes) End Sub Shared Sub RegisterRoutes(ByVal routes As RouteCollection) routes.Add("BikeSaleRoute", New Route _ ( _ "bikes/sale", New CustomRouteHandler("~/Contoso/Products/Details.aspx") _ )) End Subvoid Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } public static void RegisterRoutes(RouteCollection routes) { routes.Add("BikeSaleRoute", new Route ( "bikes/sale", new CustomRouteHandler("~/Contoso/Products/Details.aspx") )); }