asp.net mvc3路由冲突

时间:2012-11-10 06:42:06

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

我正在使用asp.net mvc3并在同一个控制器中有两种不同类型的请求,我在访问正确的方法时遇到错误

Firstcondition

  routes.MapRoute(
        "Tag1", // Route name
        "Tag/{no}", // URL with parameters
        new { controller = "Tag", action = "TagCloud", no = UrlParameter.Optional } // Parameter defaults
    );

在这种情况下,用户将访问Tag Controller,例如http://xyz.com/tag http://xyz.com/tag/3,其中号码实际为页码

Secondcondition

 routes.MapRoute(
           "Tag", // Route name
           "Tag/{tag}/{page}", // URL with parameters
           new { controller = "Tag", action = "Index", tag = "tag", page = UrlParameter.Optional } // Parameter defaults
       );

在这种情况下,用户必须提供代码名称才能获取该代码的详细信息页面http://xyz.com/tag/mvc其中mvc是代码 OR {{ 1}}其中http://xyz.com/tag/mvc/3是标记名称,mvc是页面号是可选的,

现在的问题是两者都没有同时工作,任何一个在顶部运行,而mvc跳过较低的一个。请提前帮助和谢谢。

2 个答案:

答案 0 :(得分:0)

如果更改两个路线定义的顺序会怎样?将约束添加到第一个{no}部分:必须是数字,如果不存在则为0。

答案 1 :(得分:0)

试试这个:

routes.MapRoute(
   "Tag", // Route name
   "Tag/{tag}/{page}", // URL with parameters
   new { controller = "Tag", action = "Index", tag = "tag", page = UrlParameter.Optional },
   new { page = @"\d+" }
);

routes.MapRoute(
   "Tag1", // Route name
   "Tag/{no}", // URL with parameters
   new { controller = "Tag", action = "TagCloud", no = UrlParameter.Optional },
   new { no = @"\d+" }
);