是否可以在不采取行动的情况下创建路线?
我有这个默认路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
但我也想要这样的网址:http://mysite/bar/1234
其中1234
是ID
而bar
是控制器。
所以我创建了以下路线:
routes.MapRoute(
name: "BarRoute",
url: "{controller}/{id}",
defaults: new { controller = "bar", action = "Index", id = UrlParameter.Optional }
);
但是当我导航到http://mysite/bar/1234
时,它说没有找到资源。我在第二条路线上做错了什么?
答案 0 :(得分:5)
routes.MapRoute(
name: "BarRoute",
url: "{controller}/{id}",
defaults: new { controller = "Bar", action = "Index" },
constraints: new { id = @"\d+" }
);
您必须考虑到您的路线必须放在适当的位置 - 在更一般的路线之前,例如:
routes.MapRoute(
name: "BarRoute",
routes.MapRoute(
name: "Default",
答案 1 :(得分:3)
在没有任何约束的情况下,您不能拥有以下2条路线
{controller}/{action}/{id}
{controller}/{id}
这两条路线不相容。当您尝试访问http://mysite/bar/1234
时,路由引擎正在分析您的路由,/bar/1234
与您的第一条路由匹配。除了我猜你在1234
控制器上没有名为Bar
的动作。
因此,如果您希望此设置生效,则需要指定一些constraints
。另外,请不要忘记路由定义的顺序很重要,因为它们是按照您定义的顺序解析的。因此,请确保在顶部放置更具体的路线。