Как использовать несколько маршрутов в mvc5 - PullRequest
0 голосов
/ 06 мая 2019

Проверьте код файла RouteConfig.cs ниже для проекта mvc5. Первый маршрут Default, настроенный для возврата на домашнюю страницу, работает нормально. Но второй, который я сделал для отправки трафика на контроллер Product, не работает. Я пытаюсь ударить по контроллеру - http://localhost:50070/Product/somepage/good-product

Я получаю ошибку:

Ресурс не найден.

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

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

            routes.MapRoute(
                name: "Product",
                url: "Product/{pagename}/{slug}",
                defaults: new { controller = "Product", action = "Index", slug = UrlParameter.Optional },
                namespaces: new[] { "Demo.Controllers" }
            );


        }
    }

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Ваша проблема в порядке отображения маршрутов.Маршруты сопоставляются в порядке отображения - в вашем случае Product/somepage/good-product соответствует шаблону маршрута по умолчанию, и он выбран.Но у вас нет действия Somepage на Product контроллере.

Отображение маршрута по умолчанию должно быть последним отображением (просто измените порядок):

routes.MapRoute(
    name: "Product",
    url: "Product/{pagename}/{slug}",
    defaults: new { controller = "Product", action = "Index", slug = UrlParameter.Optional },
    namespaces: new[] { "Demo.Controllers" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
0 голосов
/ 06 мая 2019

Пожалуйста, измените вторую routes таким образом

Используйте controller для pagename

routes.MapRoute(
       name: "Product",
       url: "Product/{controller}/{slug}",
       defaults: new { controller = "Product", action = "Index", slug = UrlParameter.Optional },
       namespaces: new[] { "Demo.Controllers" }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...