3

1 つのルート制約宣言で以下にアクセスできるようにしたい:

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

これは 2 番目のリクエストでは機能しません。/picks/{teamID}/{week}

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

私はアクションを提供していないので、アクションをデフォルトにする必要があるように思えますが、実際にはアクション(数字) Indexを見つけようとしていると思います。{teamID}

この制約で 3 つのシナリオすべてを処理するにはどうすればよいですか?

4

2 に答える 2

1

最初のルートのルート文字列からアクションを省略する必要があります。

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}"

ルートは、追加された順序で試行されます。

于 2012-10-17T21:25:30.820 に答える
1

PhillHaackルートデバッガーを確認してください。

制約を追加してteamId、数値の場合にのみ取得されるようにすることもできます

routes.MapRoute(
  "picks",
  "picks/{action}/{teamID}/{week}",
  new
  {
      controller = "Picks",
      action = "Index",
      teamID = UrlParameter.Optional,
      week = UrlParameter.Optional
  },
  new { teamID = @"\d+" });
于 2012-10-17T21:25:42.553 に答える