2016-05-18 4 views
0

Недавно я наткнулся на этот вопрос:.net MVC маршрутизации по умолчанию

У меня есть этот маршрут от RouteConfig

public static void RegisterRoutes(RouteCollection routes) 
{ 
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
    "", 
    "{controller}/{action}/{productName}", 
    new 
    { 
     action = "Show", 
     productName = "aaaa" 
    } 
    ); 
} 

Теперь им нужно добавить маршрут, чтобы убедиться, что все продукты, которые никогда больше не существуют или Измененные идентификаторы будут отображаться в продукте.

Рекомендуемое решение состоит в:

routes.MapRoute(
    "Product", 
    "Product/{action}/{productName}", 
    new { action = "Show", productName = "aaa" } 
); 

но без контроллера в значение по умолчанию для маршрута, он будет бросать исключение

Согласованный маршрут не включает в себя «контроллер 'значение маршрута, которое требуется .

Таким образом, можно определить маршрут с маршрутизацией по умолчанию, но не указан контроллер?

+1

Нет, это невозможно. –

ответ

0

Stephen is correct, невозможно проложить маршрут без указания контроллера. Тем не менее, можно использовать значение контроллера по умолчанию и не передавать значение для {controller} в URL.

routes.MapRoute(
    "Product", 
    "Product/{action}/{productName}", 
    new { controller = "Product", action = "Show", productName = "aaa" } 
); 

Кроме того, вы должны быть осторожны, указав свои другие значения по умолчанию. То, что вы определили здесь, - это необязательные значения для action и productName, которые по умолчанию соответствуют тому, что вы указали в defaults.

Таким образом, следующие URL-адреса будут функционировать:

  • /Product
  • /Product/Show

Обычно это не имеет никакого смысла, чтобы сделать "по умолчанию" продукт. Было бы целесообразнее сделать action и productName в требуемые параметры в URL.

routes.MapRoute(
    "Product", 
    "Product/{action}/{productName}", 
    new { controller = "Product" } 
); 
Смежные вопросы