如何在MVC5中使用多重路由

时间:2019-05-06 11:17:43

标签: c# asp.net-mvc

在mvc5项目上检查下面的RouteConfig.cs文件代码。配置为返回首页的第一个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 :(得分:0)

请像这样更改第二个routes

使用controllerpagename

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

答案 1 :(得分:0)

您的问题是路由映射的顺序。路由按照映射顺序进行匹配-在您的情况下,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 }
);