次の方法で共有


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

Invoking a controller action that expects a parameter value

図 01: パラメーター値が期待されるコントローラー アクションの呼び出し (ここをクリックすると、フルサイズの画像を表示できます)

一方、URL /Home/Index/3 は、リスト 5 のインデックス コントローラー アクションで問題なく動作します。 要求 /Home/Index/3 により、値 3 を持つ Id パラメーターを使用して Index() メソッドが呼び出されます。

まとめ

このチュートリアルの目的は、ASP.NET ルーティングの簡単な概要を説明することです。 新しい ASP.NET MVC アプリケーションで取得する既定のルート テーブルを調べました。 既定のルートが URL をコントローラー アクションにマップする仕組みについて学習しました。