Url开头的MVC Route的可选值

时间:2012-03-09 07:04:49

标签: asp.net-mvc-3 routes

我正试图让这些路线一起工作,但我不确定如何让它工作:

"{prcode}/{controller}/{action}/{id}"
"{controller}/{action}/{id}"

我的控制器的想法是,如果提供prcode,它将使用该产品代码,否则它将使用产品代码基于其他逻辑。

但对于其他不关心prcode的控制器,它应该忽略它。

这可能吗?

2 个答案:

答案 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