Как мне разрешить эти два конфликтующих маршрута MVC? - PullRequest
1 голос
/ 02 февраля 2011

Вот URL-адреса, которые я пытаюсь сопоставить с MVC3

routes.MapRoute( "Products", "{controller}/{id}/{*name}", new { action = "view" }, new { id = @"\d+" } );

/ products / 13 / seo-friendly-name-of-the-product

Теперь следующий маршрут, который мне нужно сопоставить, это

routes.MapRoute( "General", "{controller}/{id}/{action}", new { }, new { id = @"\d+" } );

/ user / 42 / changepassword

Я хочу знать, как решить эту проблему.Простого изменения порядка недостаточно, потому что перестает работать одна область приложения.Я знаю, что {* name} и {action} противоречат друг другу, но я не знаю, что делать, чтобы это исправить.

Ответы [ 2 ]

4 голосов
/ 02 февраля 2011

Цель состоит в том, чтобы устранить неоднозначные совпадения, поэтому давайте рассмотрим создание более конкретного.Контроллер для вашего маршрута продуктов всегда "Продукты"?Если да, можете ли вы изменить этот маршрут на

routes.MapRoute(
    "Products", // Route name
    "products/{id}/{*name}", // URL with parameters
    new { action = "view", controller="Products" }, // defaults
    new { id = @"\d+" } // constraints
);
0 голосов
/ 02 февраля 2011

Этот конфликт трудно разрешить просто потому, что:

/products/13/seo-friendly-name-of-the-product
/user/42/changepassword

одинаковы, и это всегда будет первый маршрут, который выберет запрос. Вам может потребоваться установить некоторые ограничения (например, сказать, что значение catch-all всегда будет содержать тире, которые устранят его неоднозначность с другим маршрутом, поскольку имя действия не может содержать тире или фиксировать контроллер для маршрута catch-all).

...