SYSTEM,WEB,MOBILE and DESIGN
ASP.NET MVC

ルーティング機能は、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となってしまう。

内容が乏しくて申し訳ありませんが、思いついたことがあれば追記していきます。