Partager via


Comment : définir un itinéraire

Mise à jour : novembre 2007

Vous utilisez le routage ASP.NET pour gérer des demandes d'URL qui ne mappent pas à un fichier physique dans le site Web. Vous créez un itinéraire en définissant un modèle pour l'URL et en spécifiant un gestionnaire qui est appelé en réponse à la demande.

Lorsque vous définissez un itinéraire, vous pouvez spécifier des valeurs par défaut pouvant fournir une valeur qui est utilisée en cas d'absence d'un paramètre dans la demande d'URL. Vous pouvez également spécifier des contraintes afin de vous assurer que les paramètres contiennent des valeurs valides.

Vous pouvez utiliser le routage pour générer des URL dans votre application, par exemple pour créer dynamiquement des URL pour les liens hypertexte. Lorsque vous construisez une URL, plusieurs définitions d'itinéraire peuvent correspondre aux paramètres que vous spécifiez. Vous pouvez préciser l'itinéraire à utiliser pour créer l'URL en indiquant le nom qui a été spécifié lors de son enregistrement.

Création d'un itinéraire

Créez un itinéraire pour qu'il corresponde à un modèle d'URL et spécifiez la façon dont les demandes de cette URL sont gérées.

Pour créer un itinéraire

  1. Ajoutez une méthode au fichier Global.asax qui crée une instance de la classe Route. Dans le constructeur de classe, affectez au paramètre url le modèle d'URL utilisé pour la mise en correspondance des demandes d'URL, puis affectez au paramètre routeHandler une instance de la classe qui traite la demande.

    Vous pouvez ajouter un paramètre passe-partout au modèle d'URL si vous souhaitez faire correspondre un itinéraire à une demande d'URL même si celle-ci inclut davantage de paramètres que ceux définis dans l'itinéraire. Pour ajouter un paramètre passe-partout, faites précéder le nom du dernier paramètre d'un astérisque (*).

  2. Pour spécifier des valeurs par défaut pour les paramètres d'itinéraire, définissez la propriété Defaults.

  3. Pour valider des valeurs de paramètre d'itinéraire, affectez l'une des valeurs suivantes à la propriété Constraints :

    • Chaîne qui définit une expression régulière. L'expression régulière ne nécessite pas de respecter la casse.

    • Objet qui implémente l'interface IRouteConstaint et qui inclut une méthode Match.

  4. Ajoutez l'objet Route à la propriété Routes de l'objet RouteTable. Si vous souhaitez attribuer un nom à l'itinéraire, appelez la méthode Add ; sinon, appelez la méthode Add.

  5. Dans le gestionnaire Application_Start du fichier Global.asax, appelez la méthode que vous avez ajoutée à la première étape.

Exemple

L'exemple suivant présente une méthode nommée RegisterRoutes qui est appelée à partir de Application_Start dans le fichier Global.asax. La méthode ajoute deux objets Route qui ont à la fois un paramètre "year" et "locale". Lorsque vous générez une URL, les itinéraires peuvent être distingués par un nom. L'exemple montre comment ajouter ces itinéraires en tant qu'itinéraires nommés. Les itinéraires ont également des contraintes, des valeurs par défaut et un paramètre passe-partout.

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RegisterRoutes(RouteTable.Routes)
End Sub

Shared Sub RegisterRoutes(routes As RouteCollection)
    Dim salesUrlPattern As String
    Dim expensesUrlPattern As String
    Dim salesRoute As Route
    Dim expensesRoute As Route

    salesUrlPattern = "SalesReport/{locale}/{year}/{*queryvalues}"
    salesRoute = New Route(salesUrlPattern, New SalesRouteHandler)
    salesRoute.Constraints = New RouteValueDictionary(New With _
        {.locale = "[a-z]{2}-[a-z]{2}", .year = "\d{4}"})
    salesRoute.Defaults = New RouteValueDictionary(New With _
        {.locale = "en-US", .year = DateTime.Now.Year.ToString()})

    routes.Add("SalesRoute", salesRoute)

    expensesUrlPattern = "ExpensesReport/{locale}/{year}/{*queryvalues}"
    expensesRoute = New Route(expensesUrlPattern, New ExpensesRouteHandler)
    expensesRoute.Constraints = New RouteValueDictionary(New With _
        {.locale = "[a-z]{2}-[a-z]{2}", .year = "\d{4}"})
    expensesRoute.Defaults = New RouteValueDictionary(New With _
        {.locale = "en-US", .year = DateTime.Now.Year.ToString()})

    routes.Add("ExpensesRoute", expensesRoute)

End Sub
protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add("SalesRoute", new Route
    (
         "SalesReport/{locale}/{year}/{*queryvalues}"
         , new SalesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
    routes.Add("ExpensesRoute", new Route
    (
         "ExpensesReport/{locale}/{year}/{*queryvalues}"
         , new ExpensesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
}

Voir aussi

Tâches

Comment : construire une URL à partir d'un itinéraire

Concepts

Routage ASP.NET