次の方法で共有


方法 : 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 フォームのインスタンスを作成しています。このインスタンスが要求のエンドポイントとして返されます。

    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
    
    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 という名前のクラスを登録するメソッドを示しています。

    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
    
    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")
        ));
    }
    

参照

概念

ASP.NET ルーティング

HTTP ハンドラと HTTP モジュールの概要