カスタム ルートを作成する (C#)

作成者: Microsoft

ASP.NET MVC アプリケーションにカスタム ルートを追加する方法について説明します。 このチュートリアルでは、Global.asax ファイルの既定のルート テーブルを変更する方法について説明します。

このチュートリアルでは、ASP.NET MVC アプリケーションにカスタム ルートを追加する方法について説明します。 カスタム ルートを使用して Global.asax ファイルの既定のルート テーブルを変更する方法について説明します。

多くの単純な ASP.NET MVC アプリケーションの場合、既定のルート テーブルは正常に動作します。 ただし、特殊なルーティングのニーズがある場合があります。 その場合は、カスタム ルートを作成できます。

たとえば、ブログ アプリケーションを構築しているとします。 次のような受信要求を処理できます。

/Archive/12-25-2009

ユーザーがこの要求を入力すると、2009 年 12 月 25 日に対応するブログ エントリが返されます。 この種類の要求を処理するには、カスタム ルートを作成する必要があります。

リスト 1 の Global.asax ファイルには、Blog という名前の新しいカスタム ルートが含まれています。このルートは、/Archive/entry date のような要求を処理します。

リスト 1 - Global.asax (カスタム ルートを使用)

using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Blog",                                           // Route name
                "Archive/{entryDate}",                            // URL with parameters
                new { controller = "Archive", action = "Entry" }  // Parameter defaults
            );
            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }
        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

ルート テーブルに追加するルートの順序は重要です。 新しいカスタム ブログ ルートは、既存の既定のルートの前に追加されます。 順序を逆にした場合、カスタム ルートの代わりに常に既定のルートが呼び出されます。

カスタム Blog ルートは、/Archive/ で始まるすべての要求と一致します。 そのため、次のすべての URL と一致します。

  • /Archive/12-25-2009

  • /Archive/10-6-2004

  • /Archive/apple

カスタム ルートは、受信要求を Archive という名前のコントローラーにマップし、Entry() アクションを呼び出します。 Entry() メソッドが呼び出されると、エントリの日付が entryDate という名前のパラメーターとして渡されます。

ブログ カスタム ルートは、リスト 2 のコントローラーと共に使用できます。

リスト 2 - ArchiveController.cs

using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class ArchiveController : Controller
    {
        public string Entry(DateTime entryDate)
        {
            return "You requested the entry from " + entryDate.ToString();
        }
    }
}

リスト 2 の Entry() メソッドは DateTime 型のパラメーターを受け入れることに注意してください。 MVC フレームワークは、エントリの日付を URL から DateTime 値に自動的に変換するのに十分なスマートです。 URL のエントリ日付パラメーターを DateTime に変換できない場合は、エラーが発生します (図 1 を参照)。

図 1 - パラメーターの変換エラー

[New Project]\(新しいプロジェクト\) ダイアログ ボックス

図 01: パラメーターの変換中にエラーが発生しました (フルサイズの画像を表示する場合にクリックします)

まとめ

このチュートリアルの目的は、カスタム ルートを作成する方法を示することでした。 ブログ エントリを表す Global.asax ファイルのルート テーブルにカスタム ルートを追加する方法について説明しました。 ブログ エントリの要求を ArchiveController という名前のコントローラーと Entry() という名前のコントローラー アクションにマップする方法について説明しました。