Contraintes de routage
ASP.NET Core, vous pouvez passer des variables sur des URL en définissant des modèles de routage, et vous pouvez fournir des paramètres par défaut, optionnels et contraintes pour les variables.
La contrainte est utilisée en ajoutant le nom de contrainte spécifié à la route d’attributs, qui est utilisée comme suit :
Certaines contraintes sont déjà prévues dans le cadre, comme suit :
Contraintes | exemple | Exemples de matchs | illustrer | int | {id :int} | 123456789, -123456789 | Correspondre à tout entier | bool | {active :bool} | vrai, FAUX | Correspondre vrai ou faux (sensible à la majuscule) | date | {date de naissance :datetime} | 31-12-2016, 31-12-2016 19:32 | Correspond aux valeurs valides de DateTime (dans une localité fixe - voir avertissement) | Décimal | {price :décimal} | 49.99, -1,000.01 | Correspond aux valeurs décimales valides (dans une localité fixe - voir avertissement) | Double | {poids :double} | 1.234, -1 001.01e8 | Correspond à des valeurs doubles valides (dans une localité fixe - voir avertissement) | Flotteur | {poids :flottant} | 1.234, -1 001.01e8 | Correspond aux valeurs de flottement valides (dans une localité fixe - voir les avertissements) | Guid | {id :guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Correspond aux valeurs valides du GUID | long | {tic :long} | 123456789, -123456789 | Correspondance valide des valeurs longues | minlongueur(valeur) | {nom d’utilisateur :minlongueur(4)} | Meule | La chaîne doit comporter au moins 4 caractères | longueur(valeur) | {Nom du fichier :MaxLongueur(8)} | Richard | Les chaînes ne doivent pas dépasser 8 caractères | longueur(longueur) | {nom de fichier :longueur(12)} | somefile.txt | La chaîne doit comporter exactement 12 caractères | Longueur (min,max) | {filename :longueur(8,16)} | somefile.txt | La chaîne doit comporter au moins 8 caractères et pas plus de 16 caractères | min(value) | {age :min(18)} | 19 | La valeur entière doit être au moins 18 | max(valeur) | {age :max(120)} | 91 | La valeur entière ne doit pas dépasser 120 | portée (min,max) | {âge :plage(18,120)} | 91 | La valeur entière doit être d’au moins 18 et ne pas dépasser 120 | Alpha | {name :alpha} | Meule | La chaîne doit être composée d’un ou plusieurs caractères alphabétiques (de a à z, à la différence de la capitale). | Regex (expression) | {SSN :Regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | La chaîne doit correspondre à l’expression régulière (voir conseils pour définir les expressions régulières) | Obligatoire | {nom :requis} | Meule | Utilisé pour imposer la présence de valeurs non paramétriques lors de la génération d’URL |
Les contraintes intégrées fonctionnent pour la plupart des cas d’usage courants, mais parfois il faut encore personnaliser l’effet souhaité.
Contraintes de routage personnalisées
Une contrainte personnalisée consiste à implémenter l’interface IRouteConstraint puis à surcharger la méthode Match, qui possède quatre paramètres.
Le premier paramètre, httpContext, est le contexte de la requête actuelle
Le second paramètre, route, est celui auquel appartient la contrainte actuelle
Le troisième paramètre, routeKey, est le nom de la variable actuellement vérifiée, comme id dans l’exemple au début de l’article La quatrième valeur du paramètre est la valeur du dictionnaire que correspond l’URL actuelle, comme la route de l’exemple au début de l’article ; si l’URL est utilisateur/1, alors il existe un dictionnaire avec clé = id , valeur = 1. Bien sûr, il existe aussi des valeurs pour d’autres variables, comme contrôleur, action, etc.
Le cinquième paramètre, routeDirection, est une valeur énumérée qui indique si l’URL est demandée par le web ou générée par une méthode telle que Url.Action.
Par exemple, nous voulons définir une contrainte qui précise que les paramètres passés par la route doivent être la valeur d’énumération spécifiée.
Définissons d’abord un enum :
Alors définissez les contraintes :
Ajoutez des contraintes personnalisées à la méthode ConfigureServices dans Startup.cs :
Utilisation des contraintes sur les routes :
(WebApplicationTest est l’espace de noms actuel)
{id :int :min(2)} doit utiliser min(2), sinon il y aura un conflit pour id = 0 ou id = 1.
Exécutez le programme et associez nos contraintes personnalisées lorsque les routes sont api/test/0, api/test/1, api/test/true, et api/test/false.
Si la route est api/test/{entier supérieur à 2}, correspondez à la seconde route.
D’autres cas correspondent à la troisième voie.
conclusion
Les contraintes de routage sont une fonctionnalité très utile dans certains scénarios, qui peuvent réduire les paramètres de vérification dans le contrôleur, et la fonction de validation partielle des paramètres peut être implémentée en utilisant l’attruibute déclaratif, et certains contrôles en double peuvent être extraits en contraintes pour un usage public.
Le constructeur de contrainte peut être injecté, il peut donc être très extensible, et une certaine vérification des paramètres peut être effectuée en interrogeant la base de données.
Le site officiel ne mentionne que brièvement les contraintes de routage, et cet article fournit des exemples précis de l’utilisation des contraintes de routage.
|