我正在使用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跳过较低的一个。请提前帮助和谢谢。
答案 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+" }
);