2013-12-17 3 views
2

Я хочу, чтобы пользователи имели доступ к странице «/ Linecard» моего сайта ASP.Net MVC с использованием «/ Linecard» или «/ Manufacturers» в качестве URL ... так что тот же контроллер , 2 разных возможных URL-адреса.MVC: несколько маршрутов для 1 контроллера

Я попытался добавить следующее:

routes.MapRoute(
     name: "Manufacturers", 
     url: "Manufacturers/{action}/{id}", 
     defaults: new { controller = "Linecard", action = "Index", id = UrlParameter.Optional } 
    ); 

Добавление этого после того, как «По умолчанию» маршрут не работает на всех, и я получаю 404 ошибку, когда я иду в «/ Производители». Помещая это ДО НАЧАЛА «По умолчанию», но тогда только «/ Производители» отображаются в URL-адресе, когда я нажимаю ссылки меню, так как это первое совпадение. Я бы хотел, чтобы «/ Linecard» всегда отображался как URL-адрес.

Любые указатели? Есть ли определенные ограничения, которые я могу использовать для этого? Благодаря!

ответ

4

У меня была такая же проблема, когда мы перешли на URL-адрес без расширения. Нам нужно было продолжать поддерживать один маршрут с расширениями. Я получил вокруг него, чтобы мой маршрута по умолчанию применяется ко всему, кроме старого URL, то после этого отображение одного специально для исключения

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    // if controller specified does not match 'manufacturers' (case insensitive) 
    new { controller = "^((?i)(?!manufacturers).)*$" }, 
    new string[] { "Namespace.Of.Controllers" } 
); 

routes.MapRoute(
    "Manufacturers", // Route name 
    "Manufacturers/{action}/{id}", // URL with parameters 
    new { controller = "Linecard", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "Namespace.Of.Controllers" } 
); 
+0

Отлично ... это сделало именно то, что я хотел. Спасибо! –

0

Вы можете также установить порядок, при отображении ваших маршрутов с дефолтами в конце, как так

routes.MapRoute(
    name: "Manufacturers", 
    url: "Manufacturers/{action}/{id}", 
    defaults: new { controller = "Linecard", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 
Смежные вопросы