Как в MVC настроить 2 маршрута (один с жестко заданным сегментом, а другой с пустым сегментом), чтобы они указывали на один и тот же пункт назначения?

Я пытаюсь настроить маршруты в своем приложении MVC, где один маршрут может иметь сегмент «Портал», а другой маршрут вообще не имеет сегмента «Портал». По сути, мне нужны эти URL-адреса, чтобы отправить пользователя на ту же страницу, но я также хочу, чтобы /Home/Index был по умолчанию:

/Portal/Home/Index
/Home/Index

У меня есть следующий код:

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

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

Это позволяет пользователю перейти к /Portal/Home/Index и /Home/Index, но проблема в том, что веб-сайт теперь по умолчанию использует /Portal/Home/Index.

Мне нужно, чтобы веб-сайт по умолчанию имел /Home/Index, но по-прежнему разрешал /Portal/Home/Index


person freakinthesun    schedule 13.10.2017    source источник


Ответы (1)


Одним из решений является добавление маршрута для домашней страницы, чтобы переопределить PortalDefault.

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

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

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

ПРИМЕЧАНИЕ. Кажется странным, что ваш маршрут PortalDefault не определяет значение маршрута для portal, а ваш маршрут Default определяет.

person NightOwl888    schedule 14.10.2017