题
在Monorail中,我试图创建一个URL重写规则,以向文章帖子提供友好的URL。这是URL的样子:
http://domain.com/2010/11/29/winter-snow-warning
这是global.asax.cs中的代码来重写URL:
RoutingModuleEx.Engine.Add(
new PatternRoute("/<year>/<month>/<day>/<title>")
.DefaultForController().Is("post")
.DefaultForAction().Is("show")
.Restrict("year").ValidInteger
.Restrict("month").ValidInteger
.Restrict("day").ValidInteger
);
这很好,但是如果URL中有一个感叹号:
http://domain.com/2010/11/29/winter-snow-warning!!
然后,它与重写规则不匹配并出现错误,说无法找到控制器“ 2010”。我在这里错过了什么,这是单轨中的错误吗?
解决方案
也许单轨路由的默认匹配机制不接受感叹号,因此该路由不匹配,默认值 /controller/action
相反,规则是匹配的,因为没有2010年控制器存在失败。
快速的解决方法可能是将标题限制为适合您需求的确切表达。例如: .Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")
不隶属于 StackOverflow