ASP.NET MVC ルーティング概要 (VB)
投稿者: Stephen Walther
このチュートリアルでは、ASP.NET MVC フレームワークがブラウザー要求をコントローラー アクションにマップする方法について説明します。
このチュートリアルでは、ASP.NET ルーティングと呼ばれる、すべての ASP.NET MVC アプリケーションで重要となる機能について説明します。 ASP.NET ルーティング モジュールは、受信したブラウザー要求を特定の MVC コントローラー アクションにマッピングする役割を担います。 このチュートリアルを完了すると、標準ルート テーブルが要求をコントローラー アクションにマップする方法を理解できます。
既定のルート テーブルの使用
新しい ASP.NET MVC アプリケーションを作成すると、ASP.NET ルーティングを使用するようにアプリケーションが構成済みとなっています。 ASP.NET ルーティングは 2 つの場所で設定されます。
まず、ASP.NET ルーティングは、アプリケーションの Web 構成ファイル (Web.config ファイル) で有効になります。 ルーティングに関連する構成ファイルには、system.web.httpModules セクション、system.web.httpHandlers セクション、system.webserver.modules セクション、system.webserver.handlers セクションの 4 つのセクションがあります。 これらのセクションを削除しないように注意してください。これらのセクションがない場合、ルーティングは機能しなくなります。
次に、さらに重要なのは、ルート テーブルはアプリケーションの Global.asax ファイルに作成されることです。 Global.asax ファイルは、ASP.NET アプリケーション のライフサイクル イベント用イベント ハンドラーを含む特殊なファイルです。 ルート テーブルは、アプリケーションの開始イベント中に作成されます。
リスト 1 のファイルには、ASP.NET MVC アプリケーションの既定の Global.asax ファイルが含まれています。
リスト 1 - Global.asax.vb
' Note: For instructions on enabling IIS6 or IIS7 classic mode,
' visit https://go.microsoft.com/?LinkId=9394802
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
MVC アプリケーションが最初に起動すると、Application_Start() メソッドが呼び出されます。 このメソッドは、RegisterRoutes() メソッドを呼び出します。 RegisterRoutes() メソッドはルート テーブルを作成します。
既定のルート テーブルには、Default という名前の単一のルートが含まれています。 既定のルートは、URL の最初のセグメントをコントローラー名に、2 番目のセグメントをコントローラー アクションにマップし、3 番目のセグメントを id という名前のパラメーターにマップします。
Web ブラウザーのアドレス バーに次の URL を入力するとします。
/Home/Index/3
既定のルートは、この URL を次のパラメーターにマップします。
controller = Home
action = Index
id = 3
URL /Home/Index/3 を要求すると、次のコードが実行されます。
HomeController.Index(3)
既定のルートには、3 つのパラメーターすべてに対する既定値が含まれています。 コントローラーを指定しない場合、コントローラー パラメーターは既定で Home になります。 アクションを指定しない場合、アクション パラメーターは既定で Index になります。 最後に、ID を指定しない場合、id パラメーターは既定で空の文字列になります。
既定のルートが URL をコントローラー アクションにマップする仕組みの例をいくつか見てみましょう。 ブラウザーのアドレス バーに次の URL を入力するとします。
/Home
この URL を入力すると、Default ルート パラメーターの既定値により、リスト 2 の HomeController クラスの Index() メソッドが呼び出されます。
リスティング 2 - HomeController.vb
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index(ByVal id As String)
Return View()
End Function
End Class
リスト 2 では、HomeController クラスに、Id という名前の単一パラメーターを受け取る Index() という名前のメソッドが含まれています。URL /Home により、値 Nothing を Id パラメーターの値として使用して Index() メソッドが呼び出されます。
MVC フレームワークがコントローラー アクションを呼び出す仕組みにより、URL /Home はリスト 3 の HomeController クラスの Index() メソッドも照合します。
リスト 3 - HomeController.vb (パラメーターなしのインデックス アクション)
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
End Class
リスト 3 の Index() メソッドは、パラメーターを受け取りません。 URL /Home により、この Index() メソッドが呼び出されます。 URL /Home/Index/3 もこのメソッドを呼び出します (Id は無視されます)。
URL /Home は、リスト 4 の HomeController クラスの Index() メソッドも照合します。
リスト 4 - HomeController.vb (null 許容パラメーターありのインデックス アクション)
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index(ByVal id? As Integer)
Return View()
End Function
End Class
リスト 4 では、Index() メソッドには 1 つの Integer パラメーターがあります。 パラメーターは null 許容パラメーター (Nothing 値を持つことができます) であるため、エラーを発生させずに Index() を呼び出すことができます。
最後に、URL /Home でリスト 5 の Index() メソッドを呼び出すと、ID パラメーターが null 許容パラメーター ではないため、例外が発生します。 Index() メソッドを呼び出そうとすると、図 1 に示したようなエラーが表示されます。
リスト 5 - HomeController.vb (Id パラメーターを使用したインデックス アクション)
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index(ByVal id As Integer)
Return View()
End Function
End Class
図 01: パラメーター値が期待されるコントローラー アクションの呼び出し (ここをクリックすると、フルサイズの画像を表示できます)
一方、URL /Home/Index/3 は、リスト 5 のインデックス コントローラー アクションで問題なく動作します。 要求 /Home/Index/3 により、値 3 を持つ Id パラメーターを使用して Index() メソッドが呼び出されます。
まとめ
このチュートリアルの目的は、ASP.NET ルーティングの簡単な概要を説明することです。 新しい ASP.NET MVC アプリケーションで取得する既定のルート テーブルを調べました。 既定のルートが URL をコントローラー アクションにマップする仕組みについて学習しました。