2013-05-30 61 views
3

我注册了一个路线:缺少路由参数

routes.MapRoute(
    "Journals", 
    "Journals/{year}/{month}/{id}", 
    new { 
     controller = "Journals", 
     action = "Get", 
     year = UrlParameter.Optional, 
     month = UrlParameter.Optional, 
     id = UrlParameter.Optional 
    } 
); 

操作:

public ActionResult Get(int? year, int? month, int? id) 

从以后的(只是为了检查):

@Url.Action("Get", "Journals") 
@Url.Action("Get", "Journals", new { year = 2013 }) 
@Url.Action("Get", "Journals", new { year = 2013, month = 4 }) 
@Url.Action("Get", "Journals", new { year = 2013, month = 4, id = 1 }) 

而且结果是:

/Journals 
/Journals 
/Journals/2013/4 
/Journals/2013/4/1 

所以第二个网址错过了参数。怎么了?

+1

针对这些情况的一个有用的工具是Phil Haack的路由调试器:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – neontapir

回答

1

你不能有超过1个连续可选路由参数..因为它无法理解的是缺少其中之一..

2013年在/期刊/ 2013可以被解释为一个yearmonthid

请参阅Infinite URL Parameters for ASP.NET MVC Route了解使用catch-all路由参数的解决方法。