문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top