Maproute MVC3 без отображения действий?

Если у меня есть следующий MapRoute:

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

У меня может быть URL-адрес, например:

blabla.com/Home/Index/123

Но какой MapRoute мне нужно создать, чтобы иметь возможность сделать это:

blabla.com/Home/123 or blabla.com/Home/DEADBEEF?

Я предполагаю, что это связано с чем-то вроде "{controller}/{id}/{action}"

Действие и идентификатор меняются местами, и, возможно, должно быть действие по умолчанию. Но как MapRoute узнает, с каким контроллером следует обращаться подобным образом?


person NomenNescio    schedule 16.01.2013    source источник
comment
У вас есть ограничение (разрешены только числа и т. д.) для последнего сегмента?   -  person Ufuk Hacıoğulları    schedule 16.01.2013
comment
@UfukHacıoğulları Нет, желательно, чтобы это была строка.   -  person NomenNescio    schedule 16.01.2013
comment
Вы пытались удалить /{action} ?   -  person BjarkeCK    schedule 16.01.2013


Ответы (2)


Вероятно, вам нужно что-то в этом роде.

  routes.MapRoute(
      name: "DefaultRoute",
      url: "Home/{action}",
      defaults: new { controller = "Home", action = "Index" },
      constraints: new { action = "[A-Za-z]*" }
  );

или без действия

  routes.MapRoute(
      name: "DefaultRoute",
      url: "Home/{id}",
      defaults: new { controller = "Home", action = "Index", id = "" },
      constraints: new { id = "[A-Za-z]*" }
  );

Вам нужно будет убедиться, что имя маршрута отличается от любых других маршрутов, которые вы настроили, и обратить внимание на порядок маршрутов, поскольку другие похожие маршруты могут переопределять друг друга. В этом случае убедитесь, что вы, вероятно, захотите это перед маршрутом по умолчанию, но имейте в виду, что он переопределит его.

Что касается отсутствия контроллера или даже действия, вы можете установить значения по умолчанию и не нуждаться в них в маршруте.

Что касается ограничений, вы можете просто добавить параметр ограничений в маршрут, чтобы установить регулярное выражение для определенного атрибута, как показано выше.

РЕДАКТИРОВАТЬ: Вот несколько полезных ссылок для получения дополнительной информации о маршрутизации, если вам это нужно.

person Lee    schedule 16.01.2013

Вы можете добавить маршрут следующим образом:

routes.MapRoute(
    "CustomRoute",
    "Home/{id}",
    new { controller = "Home", action = "Index", id = "" });

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

person Ufuk Hacıoğulları    schedule 16.01.2013
comment
Установка пользовательского маршрута сначала решила мою проблему. Вы получаете мой голос. - person Rod Hartzell; 02.07.2014