ASP.NET サイトマップ プロバイダの実装

更新 : 2007 年 11 月

ASP.NET サイト ナビゲーションには、Web ページにナビゲーション構造を表示する Web サーバー コントロールである SiteMapPath コントロール、TreeView コントロール、および Menu コントロールが用意されています。これらの Web サーバー コントロールでは、ASP.NET の既定のサイトマップ プロバイダ、または XmlSiteMapProvider クラスを使用して XML 形式の Web.sitemap ファイルからサイトマップ情報を読み取ります。

また、独自のサイトマップ プロバイダを実装することもできます。カスタム サイトマップ プロバイダを作成する 3 つの主な理由は次のとおりです。

  • ASP.NET の既定サイトマップ プロバイダによってサポートされていないデータ ソース内にサイトマップ情報を格納するため。たとえば、サイトマップ データは Oracle データベースやその他のデータ ソースに格納できます。

  • Web.sitemap ファイルに使用されているスキーマとは異なるスキーマを使用してナビゲーション情報を管理するため。たとえば、サイトマップ データを格納するための既存の実装がある場合があります。

  • 動的なサイトマップ構造を使用するため。たとえば、クライアント アカウントごとに異なるサイトマップを表示できるようにします。

ms178431.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

拡張子が .sitemap 以外のファイル名を持つファイルにサイトマップ データを格納するカスタム サイトマップ プロバイダを実装すると、セキュリティ上の問題が発生する可能性があります。既定では、ASP.NET は既知の拡張子 (.sitemap など) のファイルをクライアントによるダウンロードから保護するように設定されています。データを保護するために、ファイル名の拡張子が .sitemap 以外のカスタム サイトマップ データ ファイルは App_Data フォルダに配置してください。詳細については、「ASP.NET のサイト ナビゲーションの保護」を参照してください。

必須クラス

サイトマップ プロバイダを実装するには、System.Web 名前空間から SiteMapProvider 抽象クラスを継承するクラスを作成し、SiteMapProvider クラスによって公開される抽象メンバを実装します。このトピックでは、SiteMapProvider 抽象クラスから実装する必要のある必須プロパティとメソッドについて説明します。各メンバの実装を調べるには、「方法 : ASP.NET のサイト マップ プロバイダを実装する」で、Microsoft Access ベースおよびテキスト ベースのサイトマップ プロバイダに提供されるコード例を参照してください。

ms178431.alert_note(ja-jp,VS.90).gifメモ :

SiteMapProvider クラスは、サイトマップ データの構造に 1 つの制約を課します。つまり、ルート ノードは 1 つだけ存在できます。既定の ASP.NET サイトマップ プロバイダの実装では、プロバイダのスコープ内で URL が一意であることも指定されますが、カスタム サイトマップ プロバイダにはこの制限はありません。

必須 SiteMapProvider メンバ

カスタム サイトマップ プロバイダを実装するために必要なメソッドのみを次の表に示します。SiteMapProvider 基本クラスは最小限の実装を提供します。

メソッド

説明

FindSiteMapNode

ページを表す SiteMapNode クラスのインスタンスを取得します。このメソッドはオーバーロードされます。

GetChildNodes

SiteMapNode クラスの特定のインスタンスの子ノードを取得します。

GetParentNode

SiteMapNode クラスの特定のインスタンスの親ノードを取得します。

GetRootNodeCore

現在のプロバイダによって管理されるすべてのノードのルート ノードを取得します。このメソッドは、ナビゲーション データが確実にプロバイダによって読み込まれるようにするために、各種サイト ナビゲーション クラスによって内部的に呼び出されます。このメソッドは null のノードを返すことはできません。

XmlSiteMapProvider クラスのセマンティクスに満足しているが、Web.sitemap ファイルとは異なるデータ ストアを使用する場合は、SiteMapProvider クラスではなく StaticSiteMapProvider クラスから派生させる必要があります。そうしないと、AddNode メソッドや RemoveNode メソッドなど一部のメソッドは、実装されていない限り NotImplementedException をスローします。StaticSiteMapProvider クラスには、ノードを格納および検索するためのすべての内部論理が用意されています。実装が必要なのは GetRootNodeCore メソッドと BuildSiteMap 抽象メソッドだけです。GetRootNodeCore メソッドは BuildSiteMap メソッドを単純に呼び出すことができます。

カスタム メンバ

場合によっては、SiteMapProvider 抽象クラスによっては提供されない追加機能でサイトマップ プロバイダ インターフェイスを拡張する必要があります。カスタム プロバイダが既定のプロバイダとして構成されていて、Provider の戻り値がカスタム プロバイダの型にキャストされる場合、サイトマップ プロバイダに追加するパブリック メンバには SiteMap クラスの Provider プロパティを使用してアクセスできます。

参照

処理手順

方法 : ASP.NET のサイト マップ プロバイダを実装する

概念

ASP.NET サイト ナビゲーションの概要

ASP.NET のサイト マップ セキュリティ トリミング

ASP.NET のサイト ナビゲーションの保護

データ アクセスのセキュリティ保護

その他の技術情報

ホストされた環境での ASP.NET アプリケーションのセキュリティ