0

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

第一条件

  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其中数字实际上是页码

第二条件

 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的名称,或者 http://xyz.com/tag/mvc/3mvc标签名称,并且3是可选的页面编号,

现在的问题是两者都不能同时工作,任何在上面的人都会运行,而 mvc 会跳过较低的人。请提前帮助和感谢。

4

2 回答 2

0

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

于 2012-11-10T06:48:45.057 回答
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+" }
);
于 2012-11-10T08:23:11.733 回答