In monorail I'm trying to create a url rewriting rule to give friendly urls to article posts. Here's what the urls look like:
http://domain.com/2010/11/29/Winter-snow-warning
And here's the code in global.asax.cs to rewrite the 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
);
This works great, however if there is an exclamation point in the url:
http://domain.com/2010/11/29/Winter-snow-warning!!
Then it doesn't match the rewriting rule and errors out, saying the controller "2010" cannot be found. What am I missing here, is this a bug in monorail?
Perhaps the default matching mechanism of Monorail's routing is not accepting exclamation mark, thus the route does not match and the default /controller/action
rule is matched instead, failing since no 2010 controller exists.
A quick workaround could be to to restrict the title to the exact expression that fits your needs. e.g.: .Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")