Partager via


Création d’une contrainte de route (VB)

par Stephen Walther

Dans ce tutoriel, Stephen Walther montre comment contrôler la façon dont les demandes de navigateur correspondent aux itinéraires en créant des contraintes de routage avec des expressions régulières.

Vous utilisez des contraintes d’itinéraire pour restreindre les demandes de navigateur qui correspondent à un itinéraire particulier. Vous pouvez utiliser une expression régulière pour spécifier une contrainte d’itinéraire.

Par exemple, imaginez que vous avez défini l’itinéraire dans listing 1 dans votre fichier Global.asax.

Listing 1 - Global.asax.vb

routes.MapRoute( _
    "Product", _
    "Product/{productId}", _
    New With {.controller = "Product", .action = "Details"} _
)

La liste 1 contient une route nommée Product. Vous pouvez utiliser l’itinéraire produit pour mapper les demandes de navigateur au ProductController contenu dans la description 2.

Listing 2 - Controllers\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller
    Function Details(ByVal productId As Integer) As ActionResult
        Return View()
    End Function
End Class

Notez que l’action Détails() exposée par le contrôleur de produit accepte un seul paramètre nommé productId. Ce paramètre est un paramètre entier.

L’itinéraire défini dans listing 1 correspond à l’une des URL suivantes :

  • /Product/23
  • /Product/7

Malheureusement, l’itinéraire correspond également aux URL suivantes :

  • /Product/blah
  • /Product/apple

Étant donné que l’action Détails() attend un paramètre entier, l’exécution d’une requête qui contient autre chose qu’une valeur entière entraîne une erreur. Par exemple, si vous tapez l’URL /Product/apple dans votre navigateur, vous obtiendrez la page d’erreur de la figure 1.

Boîte de dialogue New Project

Figure 01 : Voir une page exploser (cliquer pour afficher l’image en taille réelle)

Ce que vous voulez vraiment faire, c’est uniquement faire correspondre les URL qui contiennent un productId entier approprié. Vous pouvez utiliser une contrainte lors de la définition d’un itinéraire pour restreindre les URL qui correspondent à l’itinéraire. L’itinéraire Product modifié dans la liste 3 contient une contrainte d’expression régulière qui correspond uniquement aux entiers.

Listing 3 - Global.asax.vb

routes.MapRoute( _
   "Product", _
   "Product/{productId}", _
   New With {.controller = "Product", .action = "Details"}, _
   New With {.productId = "\d+"} _
)

L’expression régulière \d+ correspond à un ou plusieurs entiers. Cette contrainte oblige l’itinéraire Product à correspondre aux URL suivantes :

  • /Product/3
  • /Product/8999

Mais pas les URL suivantes :

  • /Product/apple
  • /Produit

Ces demandes de navigateur seront gérées par une autre route ou, s’il n’y a pas d’itinéraires correspondants, une erreur La ressource introuvable sera retournée.