方法 : Web フォームでルーティングを使用する

更新 : 2007 年 11 月

ASP.NET ルーティングを使用すると、Web アプリケーション内の物理ファイルにマップされない URL 要求を処理できます。ASP.NET ルーティングは、Dynamic Data を使用する ASP.NET アプリケーションや MVC フレームワークでは既定で有効になりますが、ASP.NET Web サイト プロジェクトでは有効になりません。そのため、ASP.NET Web サイトでルーティングを使用するには、それを有効化する手順を実行する必要があります。

ルーティングを有効にするには、アプリケーションの構成ファイルを変更してルーティング アセンブリを登録し、UrlRoutingModule クラスをモジュールとして追加する必要があります。さらに、ルートのためのカスタム ルート ハンドラを作成する必要もあります。このハンドラでは、IRouteHandler インターフェイスを実装し、要求の実際のエンドポイントとなる Web フォーム (.aspx ファイル) のインスタンスを作成します。最後に、ハンドラによって処理されるルートを定義する必要があります。このトピックでは、これらの手順を実行する方法について説明します。

この機能を紹介したビデオが用意されています。

ASP.NET Web サイト プロジェクトをルーティング用に構成するには

  1. アプリケーションの Web.config ファイルで、assemblies 要素に ASP.NET ルーティング アセンブリを追加します。次に例を示します。

    <add assembly="System.Web.Routing, Version=3.5.0.0, 
      Culture=neutral, 
      PublicKeyToken=31BF3856AD364E35"/>
  2. IIS 6.0 または IIS 7.0 のクラシック モードでアプリケーションを実行する場合は、httpModules 要素に UrlRoutingModule クラスを追加します。次に例を示します。

    <httpModules>
      <add name="UrlRoutingModule" 
           type="System.Web.Routing.UrlRoutingModule, 
                 System.Web.Routing, 
                 Version=3.5.0.0, 
                 Culture=neutral, 
                 PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
  3. IIS 7.0 の統合モードでアプリケーションを実行する場合は、modules 要素に UrlRoutingModule クラスを追加します。次に例を示します。

    <system.webServer>
      <modules>
        <remove name="UrlRoutingModule" />
        <add name="UrlRoutingModule" 
             type="System.Web.Routing.UrlRoutingModule, 
                   System.Web.Routing, 
                   Version=3.5.0.0, 
                   Culture=neutral, 
                   PublicKeyToken=31BF3856AD364E35"/>
      </modules>
    </system.webServer>
  4. IIS 7.0 の統合モードでアプリケーションを実行する場合は、handlers 要素に UrlRoutingHandler クラスを追加します。次に例を示します。

    <system.webServer>
      <handlers>
        <add name="UrlRoutingHandler" 
             preCondition="integratedMode" 
             verb="*" 
             path="UrlRouting.axd" 
             type="System.Web.HttpForbiddenHandler, 
                   System.Web, Version=2.0.0.0, 
                   Culture=neutral, 
                   PublicKeyToken=b03f5f7f11d50a3a" />
      </handlers>
    </system.webServer>

ハンドラを作成するには

  1. IRouteHandler インターフェイスを実装するクラスを作成します。

  2. GetHttpHandler メソッドを実装します。特定の Web フォーム (.aspx ファイル) を要求のエンドポイントとして指定するには、GetHttpHandler メソッドから Web フォームのインスタンスを返します。

    IRouteHandler インターフェイスを実装する CustomRouteHandler という名前のクラスを次の例に示します。GetHttpHandler メソッドでは、CreateInstanceFromVirtualPath メソッドを呼び出して、指定された Web フォームのインスタンスを作成しています。このインスタンスが要求のエンドポイントとして返されます。

    Visual Basic
    Public Class CustomRouteHandler
        Implements IRouteHandler
    
        Private _virtualPath As String
    
        Public Sub New(ByVal vPath As String)
            _virtualPath = vPath
        End Sub
    
        Public Property VirtualPath() As String
            Get
                Return _virtualPath
            End Get
            Private Set(ByVal value As String)
                _virtualPath = value
            End Set
        End Property
    
        Public Function GetHttpHandler(ByVal requestContext _
              As System.Web.Routing.RequestContext) _
              As System.Web.IHttpHandler _
              Implements System.Web.Routing.IRouteHandler.GetHttpHandler
            Dim redirectPage As IHttpHandler
            redirectPage = _
              BuildManager.CreateInstanceFromVirtualPath(VirtualPath, _
              GetType(Page))
            Return redirectPage
        End Function
    End Class

    C#
    public class CustomRouteHandler : IRouteHandler
    {
        public CustomRouteHandler(string virtualPath)
        {
            this.VirtualPath = virtualPath;
        }
    
        public string VirtualPath { get; private set; }
    
        public IHttpHandler GetHttpHandler(RequestContext 
              requestContext)
        {
            var page = BuildManager.CreateInstanceFromVirtualPath
                 (VirtualPath, typeof(Page)) as IHttpHandler;
            return page;
        }
    }

カスタム ハンドラを登録するには

  1. Web アプリケーションに Global.asax ファイルが含まれていない場合は、このファイルを追加します。

  2. Global.asax ファイルに、System.Web.Routing 名前空間をインポートするディレクティブを追加します。次に例を示します。

    <%@ Import Namespace="System.Web.Routing" %>
  3. Global.asax ファイルに、RouteTable クラスの Routes プロパティにルート定義を追加するメソッドを作成します。

  4. このメソッドを Application_Start イベント ハンドラから呼び出します。

    次の例は、bikes/sale に一致する要求のハンドラとして、CustomRouteHandler という名前のクラスを登録するメソッドを示しています。

    Visual Basic
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        RegisterRoutes(RouteTable.Routes)
    End Sub
    
    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.Add("BikeSaleRoute", New Route _
        ( _
           "bikes/sale", New CustomRouteHandler("~/Contoso/Products/Details.aspx") _
        ))
    End Sub

    C#
    void Application_Start(object sender, EventArgs e) 
    {
        RegisterRoutes(RouteTable.Routes);
    }
    
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.Add("BikeSaleRoute", new Route
        (
           "bikes/sale", 
           new CustomRouteHandler("~/Contoso/Products/Details.aspx")
        ));
    }
参照

概念

タグ :


Page view tracker