更新 : 2007 年 11 月
ASP.NET ルーティングを使用すると、ASP.NET アプリケーションで定義されたパターンに一致する URL を生成できます。URL を作成するには、RouteCollection クラスの GetVirtualPath メソッドを呼び出して、パラメータ値のディクショナリを渡します。ASP.NET ルーティングは、パラメータ値と URL パターンを比較し、パラメータと一致するパターンを持つ最初のルートに基づいて URL を生成します。
メソッドに渡すパラメータ値のディクショナリには、追加の値を含めることができます。ルート定義のパラメータに一致した値は、URL に含められます。追加の値は、クエリ文字列の値として挿入されます。
URL を作成するとき、指定したパラメータに複数のルート定義が一致する場合があります。ルートの名前を引数として渡すことにより、URL の作成にどのルートを使用するかを指定できます。ルートの名前は、ルートをルート コレクションに追加するときに指定します。
URL ルーティングを使って URL を構築する場合は、あらかじめ ASP.NET アプリケーションでルートを定義しておく必要があります。詳細については、「方法 : ルートを定義する」を参照してください。ルーティングを使用するための ASP.NET Web サイト プロジェクトの構成方法については、「方法 : Web フォームでルーティングを使用する」を参照してください。
一致するルートに基づく URL の作成
ASP.NET ルーティングによる URL 構築では、指定された名前付きのルートが使用されるか、指定のパラメータと一致するパターンを持った最初のルートが使用されます。
URL を作成するには
URL に含めるすべてのパラメータ値を保持する RouteValueDictionary クラスのインスタンスを作成します。パラメータの値は、ルートのパターンに一致する値を含んでいる必要があります。パラメータに追加の値を含めることもできます。その場合、値はクエリ文字列に割り当てられます。
RouteCollection クラスの GetVirtualPath メソッドを呼び出し、RouteValueDictionary オブジェクトを渡して URL を構築します。特定のルートを指定する場合は、ルート名を含めます。
GetVirtualPath メソッドは VirtualPathData オブジェクトを返します。
GetVirtualPath メソッドから返された VirtualPathData オブジェクトの VirtualPath プロパティを取得して、URL を表す文字列を取得します。
使用例
ルートから URL を作成する方法を次の例に示します。この例は、ASP.NET アプリケーションに 2 つのルートが追加されていることを想定しています。1 つ目のルートは、SalesRoute という名前で、SalesReport/{locale}/{year} というパターンが定義されています。2 つ目のルートは、ExpensesRoute という名前で、ExpensesReport/{locale}/{year} というパターンが定義されています。詳細については、「方法 : ルートを定義する」を参照してください。
この例は、URL の構築時にルートの名前を指定する方法を示しています。SalesRoute も ExpensesRoute も、year パラメータと locale パラメータを受け取ります。そのため、名前を使用して目的のルートを指定します。
この例は、URL の構築時に追加のパラメータを指定する方法も示しています。URL の構築時には、category パラメータがクエリ文字列の値として挿入されます。
Dim vpd As VirtualPathData
Dim url As String
Dim parameters As RouteValueDictionary
parameters = New RouteValueDictionary(New With _
{.year = "2007", .locale = "en-CA", .category = "recreation"})
vpd = RouteTable.Routes.GetVirtualPath _
(Nothing, _
"SalesRoute", _
parameters)
url = vpd.VirtualPath
RouteValueDictionary parameters = new RouteValueDictionary {
{ "year", "2007" }, { "locale", "en-CA" }, {"category", "recreation"} };
VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(
null,
"SalesRoute",
parameters);
string url = vpd.VirtualPath;