Маршрутизация с именем контроллера и без него в ASP.NET MVC 4

Я использую ASP.NET MVC 4, и у меня есть некоторые проблемы с настройками моих маршрутов. Не могли бы вы рассказать мне, как настроить маршруты для указания URL-адресов на действия следующим образом:

  • "/" (или "/Start" ) = > PublicController.Start()
  • "/About" = > PublicController.About()
  • "/MyPage" (или "/MyPage/Summary" ) = > MyPageController.Summary()
  • "/MyPage/Invoices" = > MyPageController.Invoices()
  • "/MyPage/Invoice/72" = > MyPageController.Invoice(int id)

Это url "/About", который меня беспокоит, т.е. URL-адрес, который не указывает контроллер. Если я сделаю так, что другие будут работать, остальные перестанут работать. Я мог бы просто создать отдельный контроллер для "/О себе", я думаю, но я бы предпочел, если мне это не нужно (у меня больше URL-адресов после этого шаблона).

Ответ 1

Это должно сделать это:

routes.MapRoute(
    name: "About",
    url: "About",
    defaults: new { controller = "Public", action = "About" }
);

routes.MapRoute(
    name: "MyPageSummary",
    url: "MyPage",
    defaults: new { controller = "MyPage", action = "Summary" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Public", action = "Start", id = UrlParameter.Optional }
);