ASP.NET маршрутизация и регулярные выражения - PullRequest
1 голос
/ 03 июня 2009

Я пытаюсь включить маршрут, подобный следующему

route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new ResultRouteHandler());
route.Constraints = new RouteValueDictionary();
route.Constraints.Add("c1", "(.*)|([-])");
route.Constraints.Add("c2", "(.*)|([-])");
RouteTable.Routes.Add(route);

Однако я сталкиваюсь с проблемой, когда c1 или c2 - "-". Например, «a-b-c, d --- f» возвращает 404 (тогда как «a-b-c, d-e-f» работает нормально). У кого-нибудь есть подсказка, что я делаю не так? Заранее спасибо.

EDIT:

Я нашел простой способ решения этой проблемы:

route = new Route("{w1}-{c1}-{n1},{w2}---{n2}", new MyRouteHandler());
RouteTable.Routes.Add(route);
route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new MyRouteHandler());
RouteTable.Routes.Add(route);

Если c2 равен "-", мы сопоставляем первый маршрут, в противном случае - второй.

Ответы [ 2 ]

1 голос
/ 07 июня 2009

Если я правильно понимаю, вы делаете хотите соответствовать "a-b-c,d---f", поэтому вы в первую очередь настраиваете ограничения. Regex, который у вас есть, является избыточным, хотя '-' будет соответствовать '.*'. Другими словами, я не думаю, что ваш Regex виноват, а скорее анализатор механизма маршрутизации.

Если вы измените свой маршрут с "{w1}-{c1}-{n1},{w2}-{c2}-{n2}" на "{w1}-{c1}-{n1},{w2}_{c2}-{n2}", то c2 начнет совпадать с '-' в "a-b-c,d_--f". Я думаю, что что-то в разборе маршрутов не любит использование разделителя в качестве следующего значения.

Так что я думаю, что вы можете отбросить свои ограничения (так как они существуют в настоящее время), но вам может потребоваться организовать свои URL-адреса немного иначе, если вы хотите, чтобы '-' было c1 или c2.

0 голосов
/ 03 июня 2009

Я не на 100% уверен в реализации регулярных выражений, но я думаю, что это должно выглядеть так:

route.Constraints.Add("c1", "([^-]*)");
route.Constraints.Add("c2", "([^-]*)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...