Contrôleur non trouvé problème lors de la réécriture url avec point d'exclamation
-
08-10-2019 - |
Question
monorail que je suis en train de créer une règle de réécriture URL pour donner urls amical à des postes de l'article. Voici ce que les urls ressemblent:
http://domain.com/2010/11/29/Winter- avertissement de neige
Et voici le code Global.asax.cs de réécrire les urls:
RoutingModuleEx.Engine.Add(
new PatternRoute("/<year>/<month>/<day>/<title>")
.DefaultForController().Is("post")
.DefaultForAction().Is("show")
.Restrict("year").ValidInteger
.Restrict("month").ValidInteger
.Restrict("day").ValidInteger
);
Cela fonctionne très bien, s'il y a un point d'exclamation dans l'url:
http://domain.com/2010/11/29/Winter- avertissement de neige !!
Ensuite, il ne correspond pas à la règle de réécriture et les erreurs, en disant le contrôleur « 2010 » ne peut pas être trouvé. Qu'est-ce que je manque ici, est-ce un bogue dans monorail?
La solution
Peut-être le mécanisme de mise en correspondance par défaut de routage de monorail n'accepte point d'exclamation, donc la route ne correspond pas à la règle et par défaut /controller/action
est adaptée au lieu, à défaut car aucun contrôleur 2010 existe.
Une solution rapide pourrait être de limiter le titre à l'expression exacte qui correspond à vos besoins. par exemple .: .Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")