使用感叹号重写URL时未发现控制器问题

时间:2010-12-05 23:14:56

标签: castle-monorail

在单轨列车中,我正在尝试创建一个网址重写规则,以便为文章帖子提供友好的网址。这是网址的样子:

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

这是global.asax.cs中的代码,用于重写网址:

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

这很有效,但是如果网址中有感叹号:

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

然后它与重写规则和错误不匹配,说无法找到控制器“2010”。我在这里想念的是,这是单轨列车中的一个错误吗?

1 个答案:

答案 0 :(得分:0)

Monorail路由的默认匹配机制可能不接受感叹号,因此路由不匹配,而是默认/controller/action规则匹配,因为没有2010控制器而失败。

快速解决方法可能是将标题限制为符合您需求的精确表达式。例如:.Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")