Partager via


Comment : utiliser le routage avec les Web Forms

Mise à jour : novembre 2007

Le routage ASP.NET vous permet de gérer des demandes d'URL qui ne mappent pas à un fichier physique dans l'application Web. Par défaut, le routage ASP.NET est activé dans une application ASP.NET pour Dynamic Data ou l'infrastructure MVC, mais le routage n'est pas activé dans les projets de site Web ASP.NET. Par conséquent, pour utiliser le routage dans un site Web ASP.NET, vous devez prendre les mesures nécessaires pour l'activer.

Pour activer le routage, vous devez modifier le fichier de configuration de l'application pour enregistrer l'assembly de routage et ajouter la classe UrlRoutingModule en tant que module. Vous devez également créer un gestionnaire de routage personnalisé pour l'itinéraire. Le gestionnaire implémente l'interface IRouteHandler et crée une instance du formulaire Web (fichier .aspx) qui sera le point de terminaison réel pour la demande. Enfin, vous devez définir les itinéraires servis par le gestionnaire. Cette rubrique indique comment effectuer ces opérations.

Visionner une vidéo qui présente cette fonctionnalité.

Pour configurer un projet de site Web ASP.NET à des fins de routage

  1. Dans le fichier Web.config de l'application, ajoutez l'assembly de routage ASP.NET à l'élément assemblies, comme le montre l'exemple suivant :

    <add assembly="System.Web.Routing, Version=3.5.0.0, 
      Culture=neutral, 
      PublicKeyToken=31BF3856AD364E35"/>
    
  2. Si l'application s'exécute sous IIS 6.0 ou sous IIS 7.0 mode classique, ajoutez la classe UrlRoutingModule à l'élément httpModules, comme le montre l'exemple suivant :

    <httpModules>
      <add name="UrlRoutingModule" 
           type="System.Web.Routing.UrlRoutingModule, 
                 System.Web.Routing, 
                 Version=3.5.0.0, 
                 Culture=neutral, 
                 PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
    
  3. Si l'application s'exécute sous IIS 7.0 mode intégré, ajoutez la classe UrlRoutingModule à l'élément modules, comme le montre l'exemple suivant :

    <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>
    
  4. Si l'application s'exécute sous IIS 7.0 mode intégré, ajoutez la classe UrlRoutingHandler à l'élément handlers, comme le montre l'exemple suivant :

    <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>
    

Pour créer le gestionnaire

  1. Créer une classe qui implémente l'interface IRouteHandler.

  2. Implémentez la méthode GetHttpHandler. Pour spécifier un formulaire Web spécifique (fichier .aspx) comme point de terminaison pour la demande, retournez une instance de celui-ci à partir de la méthode GetHttpHandler.

    L'exemple de code suivant montre une classe nommée CustomRouteHandler qui implémente l'interface IRouteHandler. La méthode GetHttpHandler appelle la méthode CreateInstanceFromVirtualPath pour créer une instance du formulaire Web spécifié. Cette instance est retournée comme point de terminaison pour la demande.

    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 Class
    
    public 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;
        }
    }
    

Pour enregistrer le gestionnaire personnalisé

  1. Si l'application Web n'a pas encore de fichier Global.asax, ajoutez-le.

  2. Ajoutez une directive au fichier Global.asax qui importe l'espace de noms System.Web.Routing, tel qu'indiqué dans l'exemple suivant :

    <%@ Import Namespace="System.Web.Routing" %>
    
  3. Créez une méthode dans le fichier Global.asax qui ajoute les définitions d'itinéraire à la propriété Routes de la classe RouteTable.

  4. Appelez cette méthode à partir du gestionnaire d'événements Application_Start.

    L'exemple suivant présente une méthode qui enregistre une classe nommée CustomRouteHandler comme gestionnaire pour les demandes qui correspondent à 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 Sub
    
    void 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")
        ));
    }
    

Voir aussi

Concepts

Routage ASP.NET

Vue d'ensemble des gestionnaires HTTP et des modules HTTP