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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top