ルーティング機能は、URL階層構造と実行したいコントローラ&アクション&パラメータを結びつける機能です。
ASP.NET MVCでは、Global.asax の RegisterRoutes メソッド内で MapRoute メソッドを呼び出して設定しています。
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
このルートの意味は、
「http://localhost:2154」
をWebアプリケーションルートと仮定した場合、
http://localhost:2154/A/B/C/
というURLが実行されたら
Aをコントローラ、
Bをアクション、
Cをidパラメータ
とし、URLにコントローラ、アクション、パラメータの指定がない場合は、それぞれ
コントローラに「Home」、
アクションに「Index」、
パラメータはなし、
という意味です。例えば、
- http://localhost:2154/
→HomeコントローラのIndexアクションを実行
- http://localhost:2154/Account
→AccountコントローラのIndexアクションを実行
こんな感じで変換します。
1番目の引数は、ルート設定の名称です。
名称は Html.ActionLink 等でリンクを作成する際に使います。
なお、「Default」という名称自体に特別な意味はないはず。。。?
2番目の引数は、Webアプリケーションルート配下からのルートパターンの定義です。
{controller} にはコントローラ名、{action} にはアクション名が入るという感じです。
その他に、アクションに渡すパラメータを定義することもできます。
3番目の引数は、URLに指定がなかった際に使用されるデフォルト値です(省略可能)。
ちなみに Default ルートの id パラメータに指定しているデフォルト値「UrlParameter.Optional」は「パラメータを省く」という意味らしいです。
設定例その1
routes.MapRoute( "Route1", "Address/{action}/{id}", new { controller = "Address", id = "1" } );
上記は以下のような感じで変換されます。
- http://localhost:2154/Address/Edit/
→AddressコントローラのEditアクションをidパラメータ”1″で実行
- http://localhost:2154/Address/Details/9/
→AddressコントローラのDetailsアクションをidパラメータ”9″で実行
- http://localhost:2154/Address/
→URLにactionがなく、デフォルト値もないため上記の定義には当てはまらない。
ルートは定義した順に検索していくため、次に Default ルートが
定義されていれば Address コントローラの Index アクションが
実行されることになる。
設定例その2
routes.MapRoute( "Route2", "Map/{x}/{y}/{z}", new { controller = "Route", action = "Disp" } );
- http://localhost:2154/Map/1/2/3/
→RouteコントローラのDispアクションをx,y,zパラメータそれぞれ”1″,”2″,”3″で実行
- http://localhost:2154/Map/4/
→URLにy,zパラメータがなく、デフォルト値もないため上記の定義には当てはまらない。
Default ルート定義が次に存在しても、Map コントローラの ”4″ アクションを
実行するという不正なURLとなってしまう。
内容が乏しくて申し訳ありませんが、思いついたことがあれば追記していきます。