Контроллер не нашел проблему при переписывании URL с восклицательным знаком - PullRequest
0 голосов
/ 06 декабря 2010

В монорельсе я пытаюсь создать правило перезаписи 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" не может быть найден. Что мне здесь не хватает, это ошибка в монорельсе?

1 Ответ

0 голосов
/ 06 декабря 2010

Возможно, механизм сопоставления маршрутов Монорельса по умолчанию не принимает восклицательный знак, поэтому маршрут не совпадает, и вместо этого используется правило /controller/action по умолчанию, которое завершается неудачей, поскольку не существует контроллера 2010 года.

Быстрый обходной путьможет быть, чтобы ограничить заголовок точным выражением, которое соответствует вашим потребностям.например: .Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")

...