使用MVC路由匹配路由

时间:2012-07-13 15:55:09

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

我有以下网址

  1. URL /描述
  2. URL /主页/会员/描述
  3. URL /主页/描述
  4. 这是我的路线

    对于上面的#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动作。帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

你的问题是场景3将与Route config 2匹配,因为它会认为描述是动作,而你没有{d}部分。

解决此问题的唯一方法是拥有非常具体的路线,并且您需要在方案2之前满足方案3。

你应该添加的最后一条路线就是这个路线,这是你的全部。

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

您的问题中不清楚的是,您的网址的描述部分是占位符还是字面值。如果是文字,那么在你的路线配置中使用它。