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