0

我有在控制器上:MVC5屬性路由,路由發射空沒有可選PARAMS

[RoutePrefix( 「」)]

與路線的動作:

[Route("things-to-do/{filter1?}/{filter2?}/{filter3?}/{filter4?}/{Area?}", Name = "thingstodo")] 
    public async virtual Task<ActionResult> ThingsToDo(string filter1 = "", string filter2 = "", string filter3 = "", string filter4 = "", string q = "") 

這工作,如果我在瀏覽器中輸入這些URL:

本地主機/東西,待辦事項
本地主機/事到-DO /東西
本地主機/事到-DO /事/東西

但這些都返回NULL:

Url.RouteUrl("thingstodo") 
Url.Action("ThingsToDo", "ControllerName") 
Url.Action(MVC.ControllerName.ThingsToDo()) 

這些返回正確的URL:

Url.Action( 「ThingsToDo」, 「ControllerName」,新的過濾器1 {= 「東西」,FILT ER2 =「東西」})
Url.Action如何正確生成(MVC.ControllerName.ThingsToDo(「東西」,「東西」))

任何幫助的URL時,我不需要可選PARAMS會不勝感激。

回答

3

我發現了一個可能的解決方案:

[Route("things-to-do/{filter1}/{filter2}/{filter3}/{filter4}/{Area?}", Order = 1)] 
    [Route("things-to-do/{filter1}/{filter2}/{filter3}/{Area?}", Order = 2)] 
    [Route("things-to-do/{filter1}/{filter2}/{Area?}", Order = 3)] 
    [Route("things-to-do/{filter1}/{Area?}", Order = 4)] 
    [Route("things-to-do/{Area?}", Order = 5)]