我正试图让这些路线一起工作,但我不确定如何让它工作:
"{prcode}/{controller}/{action}/{id}"
"{controller}/{action}/{id}"
我的控制器的想法是,如果提供prcode,它将使用该产品代码,否则它将使用产品代码基于其他逻辑。
但对于其他不关心prcode的控制器,它应该忽略它。
这可能吗?
答案 0 :(得分:2)
您可以添加路由约束以限制对prcode有效的可能值。如果模式与给定请求不匹配,它将尝试第二条路线。
路由约束可以通过如下正则表达式指定:
routes.MapRoute(
"Product",
"{prcode}/{controller}/{action}/{id}",
new { controller="Home", action="Index", id = UrlParameter.Optional },
new { prcode = @"\d+" } // route constraint accepting only numbers for prcode
);
如果您需要更复杂的逻辑或数据库中的某些值,您可以创建自定义约束来实现此目的。更多相关信息:http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx
答案 1 :(得分:0)
这是可能的,但您需要更改Route的声明方式,
"{prcode}/{controller}/{action}/{id}"
"{controller}/{action}/{id}"
由于prcode可能有也可能没有值,(即“prcode是可选的”),你不能声明为第一个值,它应该像
"{controller}/{action}/{prcode}"
和prcode可以标记为UrlParameter.Optional