3

是否可以在不采取行动的情况下创建路线?

我有这个默认路线:

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

但我也希望有这样的 URL:and是控制器http://mysite/bar/1234在哪里。1234IDbar

所以我创建了以下路线:

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

但是当我导航到 时http://mysite/bar/1234,它说找不到资源。我在第二条路线中做错了什么?

4

2 回答 2

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",
于 2012-11-28T22:01:19.830 回答
3

您不能在没有任何限制的情况下按该顺序拥有以下 2 条路线

  • {controller}/{action}/{id}
  • {controller}/{id}

这两条路线不兼容。当您尝试访问http://mysite/bar/1234时,路由引擎正在分析您的路线并/bar/1234匹配您的第一条路线。除了我猜你没有1234Bar控制器上调用一个动作。

因此,如果您希望此设置正常工作,您需要指定一些constraints. 另外不要忘记路由定义的顺序很重要,因为它们是按照您定义它们的顺序解析的。因此,请确保在顶部放置更具体的路线。

于 2012-11-28T21:59:26.593 回答