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)]