Контроллер не нашел проблему при переписывании URL с восклицательным знаком

StackOverflow https://stackoverflow.com/questions/4361902

  •  08-10-2019
  •  | 
  •  

Вопрос

В монорельсе я пытаюсь создать правило перезаписи 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