Contrôleur non trouvé problème lors de la réécriture url avec point d'exclamation

StackOverflow https://stackoverflow.com/questions/4361902

  •  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?

Était-ce utile?

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]+]")

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top