C#3.5 MVC2路由跳过可选参数

时间:2010-07-06 15:06:12

标签: c# asp.net-mvc-2 routing

我在这里:

routes.MapRoute(
    "test", // Route name
    "DataWarehouse/Distribution/{category}/{serialNo}",
    new { controller = "DataWarehouse", 
          action = "Distribution", 
          category= UrlParameter.Optional, 
          serialNo = UrlParameter.Optional } 
);

Category和serialNo都是可选参数。当路由类似于:DataWarehouse/Distribution/123时,它始终将123视为类别的值。

我的问题是如何让它知道第一个参数可以是category或serialNo,即DataWarehouse/Distribution/{category}DataWarehouse/Distribution/{serialNo}

3 个答案:

答案 0 :(得分:0)

DataWarehouse/Distribution/{category}/{serialNo}

只有最后一个参数可以是可选的。在此示例中,由于显而易见的原因,类别不能是可选的。

答案 1 :(得分:0)

如果您知道参数的外观,可以添加route constraint来区分两条路线

如果您的序列号为1234-1234-1234,并且您的类别不是这样的话,请访问:

routes.MapRoute(
    "serialonly", // Route name
    "DataWarehouse/Distribution/{serialNo}",
    new { controller = "DataWarehouse", 
          action = "Distribution", 
          category= UrlParameter.Optional, 
          serialNo = UrlParameter.Optional },
    new{serialNo = @"\d{4}-\d{4}-\d{4}"} 
);

routes.MapRoute(
    "test", // Route name
    "DataWarehouse/Distribution/{category}/{serialNo}",
    new { controller = "DataWarehouse", 
          action = "Distribution", 
          category= UrlParameter.Optional, 
          serialNo = UrlParameter.Optional },
    ,
    new{serialNo = @"\d{4}-\d{4}-\d{4}"}  
);

答案 2 :(得分:0)

我遇到了类似的问题,我尝试根据{year}/{month}/{day}month可选的数据(day)进行路由。我发现的是我无法用一条路线做到这一点。所以我通过使用3条路线解决了这个问题,从通用到特定(年,年,月,年,月和日)。我并不十分满意,但它确实有效。

因此,如果您正在寻找DataWarehouse/Distribution/{category}DataWarehouse/Distribution/{category}/{serialNo}路线,我认为这对您有用。