Mvc:路由配置顺序路由

时间:2013-04-17 03:40:53

标签: asp.net-mvc asp.net-mvc-3 routes

我添加了一个像这样的自定义路线

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

现在我尝试从一个控制器调用一个方法时遇到一些问题,这在添加新路径之前工作正常

<a id="someId" class="link-button" href="../Documents/Create"><span>Create</span></a>

现在我能实现这一目标的唯一方法就是href="EN/us/Documents/Create"

有没有办法为我的客户端保留自定义路由,并且仍然为我的管理员端保持href="../Documents/Create">方式,这是因为我在管理端开发了几个功能,但现在我必须包括客户端的自定义路由。非常感谢你。

现在有我的路线

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

routes.MapRoute(
            name: "CustomRoute",
            url: "{country}/{lang}/{controller}/{action}",
            defaults: new { controller = "Test", action = "Index" }
        );

但我只能使用/ ES / es / Test / Index访问CustomRoute ...为什么不采用默认值?

2 个答案:

答案 0 :(得分:2)

您只需要在默认路线之后声明自定义路线

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

答案 1 :(得分:1)

您已将默认的RouteConfig替换为新配置,并且它与此 {coutry} / {lang} / {controller} / {action} 格式的网址匹配。

如果您想接受../Documents/Create网址,您必须在最后添加默认的RouteConfig。

routes.MapRoute(
  name: "CustomRoute",
  url: "{coutry}/{lang}/{controller}/{action}",
  defaults: new { controller = "Documents", action = "Index" }
);

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

同样在锚标记<a id="someId" class="link-button" href="../Documents/Create"><span>Create</span></a>中,而不是对href进行硬编码,您可以编写如下内容。

<a id="someId" class="link-button" href="@Url.Action("Create","Documents")><span>Create</span></a>