我希望能够通过一个路由约束声明访问以下内容:

/picks
/picks/{teamID}/{week}
/picks/save/{teamID}/{week}


这不适用于第二个请求:/picks/{teamID}/{week}

routes.MapRoute(
  "picks",
  "picks/{action}/{teamID}/{week}",
  new { controller = "Picks",
        action = "Index",
        teamID = UrlParameter.Optional,
        week = UrlParameter.Optional });


在我看来,该动作应默认为Index,因为我没有提供该动作,但我假设它实际上是在尝试找到动作{teamID}(这是一个数字)。

如何使此约束处理所有3种情况?

最佳答案

您只需要省略第一个路由的rout字符串中的操作即可:

routes.MapRoute(
    "picks",
    "picks/{teamID}/{week}",
    new { controller = "Picks",
            action = "Index",
            teamID = UrlParameter.Optional,
            week = UrlParameter.Optional });


记住要在更通用的路由之上放置更具体的路由。

例如:

"picks/{teamID}/{week}"
"picks/{action}/{teamID}/{week}"
"{controller}/{action}/{id}"


按照添加的顺序尝试路由。

07-24 13:41