2010-12-05 8 views
0

In Monorail versuche ich eine URL-Rewriting-Regel erstellen, um freundliche URLs Artikel Beiträge zu geben. Hier ist, was die Urls wie folgt aussehen:Controller nicht gefunden Problem beim Umschreiben der URL mit Ausrufezeichen

http://domain.com/2010/11/29/Winter-snow-warning

Und hier ist der Code in global.asax.cs die Urls zu umschreiben:

RoutingModuleEx.Engine.Add(
       new PatternRoute("/<year>/<month>/<day>/<title>") 
        .DefaultForController().Is("post") 
        .DefaultForAction().Is("show") 
        .Restrict("year").ValidInteger 
        .Restrict("month").ValidInteger 
        .Restrict("day").ValidInteger 
      ); 

Dies funktioniert gut, aber wenn es ein Ausrufezeichen in die url:

http://domain.com/2010/11/29/Winter-snow-warning !!

Dann stimmt es nicht mit der Rewriting-Regel und Fehler, sagen, dass der Controller "2010" nicht gefunden werden kann. Was fehlt mir hier, ist das ein Bug in Monorail?

Antwort

0

Möglicherweise akzeptiert der Standard-Matching-Mechanismus des Monorail-Routings kein Ausrufezeichen, daher stimmt die Route nicht überein und die Standardregel /controller/action wird stattdessen verglichen, da kein Controller 2010 existiert.

Eine schnelle Abhilfe könnte darin bestehen, den Titel auf den exakten Ausdruck zu beschränken, der Ihren Anforderungen entspricht. z.B.: .Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")