2010-05-28 13 views
0

je l'itinéraire suivant:Puis-je contraindre un paramètre de route à un certain type dans ASP.net MVC?

routes.MapRoute(
    "Search",            // Route name 
    "Search/{affiliateId}",         // URL with parameters 
    new { controller = "Syndication", action = "Search" } // Parameter defaults 
); 

Est-il possible que je peux assurer « AffiliateID » est un Guid valide? J'utilise MVCContrib ailleurs sur mon site et je suis juste un moyen d'implémenter ce genre de contrainte ... Je ne sais pas ce que c'est!

+0

Donc, vous voulez vous assurer que l'affiliéId est un Guid avant de faire correspondre l'itinéraire, correct? Ou voulez-vous vous assurer que affilateId est Guid avant d'exécuter l'action de recherche? – Jab

+0

Je veux seulement que l'itinéraire corresponde si affilateId est un Guid, oui. Si ce n'est pas un guid, l'action de recherche ne devrait pas être exécutée. Merci. –

Répondre

3

Vous pouvez écrire des contraintes regex:

routes.MapRoute(
    "Search",            // Route name 
    "Search/{affiliateId}",         // URL with parameters 
    new { controller = "Syndication", action = "Search" }, // Parameter defaults 
    new { affiliateId = "SOME REGEX TO TEST GUID FORMAT" } // constraints 
); 
+0

Hmm, merci. J'espérais quelque chose d'un peu moins fragile. –

+0

@Paul Suart: Si 'affilateId' est juste un paramètre numérique, alors votre regex est simplement' "\ d" 'et vous êtes prêt à partir. Pourquoi pensez-vous que c'est fragile? –

+0

C'est un guid, donc la regex est plus complexe que "\ d". Merci quand même. –

0

Je n'ai jamais entendu parler. Je crains que cela ne cause une certaine confusion si vous avez utilisé par erreur le mauvais type pour le paramètre affiliateId dans l'une de vos méthodes d'action.

+0

Je ne pense pas qu'il soit inhabituel de contraindre un itinéraire vers une certaine structure. Comme le dit une autre affiche, je pourrais utiliser une regex qui est un moyen connu et documenté de s'assurer que l'itinéraire est seulement apparié lorsque l'URL a un certain format. Je suis un gars sympa donc non -1 :) –

+0

Ok après avoir vu ta clarification ci-dessus je crois que je t'ai mal compris. Cherchez-vous à faire deux routes, comme 'Search \ {affiliateId}' et 'Search \ {query}'? Si c'est le cas, je pense que la route regex est la meilleure. Alternativement, votre action de recherche pourrait accepter un paramètre de chaîne, puis appeler le code approprié pour la recherche par rapport aux affiliés. – Ryan