Asp.net mvc 在MVC asp.net中注册多个路由
我想在MVC中映射几个参数顺序不同的路由:Asp.net mvc 在MVC asp.net中注册多个路由,asp.net-mvc,asp.net-mvc-routing,maproute,Asp.net Mvc,Asp.net Mvc Routing,Maproute,我想在MVC中映射几个参数顺序不同的路由: localhost:1010/abcd/home/index localhost:1010/home/index/abcd id=abcd controller=home action=index 我尝试了下面的代码,但不起作用 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"
localhost:1010/abcd/home/index
localhost:1010/home/index/abcd
id=abcd
controller=home
action=index
我尝试了下面的代码,但不起作用
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ShoppingManagment",
"{id}/{controller}/{action}",
new { controller = "ShoppingManagment",
action = "ShoppingManagment", id = UrlParameter.Optional });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
}
这将不起作用,因为两条路由具有相同的格式 因此MVC路由引擎无法区分这两种url模式 尝试将控制器直接写入url模式
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ShoppingManagment",
"{id}/ShoppingManagment/{action}",
new { controller="ShoppingManagment", action = "ShoppingManagment", id = UrlParameter.Optional });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
}
您希望这些路由匹配多个控制器还是仅匹配ShoppingManagement?您的问题是,目前这两个路由定义都是相同的-string/string/string,因此它们都将由顶部路由拾取。我希望对特殊控制器使用第一种格式,而其他控制器使用第二种格式。我该怎么做?是的,通过在url模式中使用固定控制器创建第一条路由,您可以实现这一点。。。请参阅答案中的代码,它将“ShoppingManagement”控制器放入url模式中,因此无论哪个url将ShoppingManagement作为第二个参数,都将匹配此路由,其他url将匹配其他路由。我这样做了,但我得到了此错误“匹配的路由不包含“控制器”路由值,这是必需的。”请提供与第一条路由匹配的实际url。localhost:3681/ABCD/shoppingmanagement/shoppingmanagement/