Маршрутизация asp.net mvc без контроллера или имени действия

Я пытаюсь перенаправить все URL-адреса, которые не соответствуют существующему контроллеру для определенного контроллера.

Например, URL-адрес mywebsite.com/newyork должен обрабатываться как mywebsite.com/Cities/Info/newyork

Я использую следующий код в своем RegisterRoutes, но он не работает, поскольку я получаю ответ 404:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute(
            name: "Cities",
            url: "{cityname}",
            defaults: new { controller = "Cities", action = "Info", cityname= "" }
        );

Ответы

Ответ 1

Сначала вы должны перенести свои города и сбросить пустой параметр по умолчанию:

    routes.MapRoute(
        name: "Cities",
        url: "{cityname}",
        defaults: new { controller = "Cities", action = "Info" }
    );
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

Маршруты обрабатываются по порядку, поэтому у вас должно быть от 1 до наименее специфического (ваш маршрут по умолчанию).

Поскольку ваш website.com/newyork соответствовал маршруту по умолчанию, он не продолжал ваш городской маршрут.