在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" }
);
}
}
答案 0 :(得分:0)
请像这样更改第二个routes
使用controller
来pagename
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 }
);