2012-07-13 164 views
0

我有以下网址与MVC路由匹配的路由

  1. URL /描述
  2. URL /首页/会员/描述
  3. 网址/主页/描述

这里是我的路线

对于上述#1:

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

对于上面#2:

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

我在与#3的麻烦。

我想我可以做

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

但是这创造了一个无限循环。基本上我想要#3示例将“home/description”映射到Home Controller和Index操作。帮助将不胜感激!

回答

0

这里的问题是,场景3将与路由配置2匹配,因为它会认为描述是操作,并且您没有{d}部分。

解决这个问题的唯一方法是有非常具体的路线,你需要的场景之前,以配合场景3 2.

你曾经添加的最后一个路径将是这一个,这是你的包罗万象的。

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

什么是不是从你的问题清楚的是你的URL的描述部分是否是一个占位符或文字值。如果是字面的,那么在你的路由配置中使用它。