Share via


實作 ASP.NET 網站導覽提供者

更新:2007 年 11 月

ASP.NET 站台巡覽提供幾種會在 Web 網頁上顯示巡覽結構的 Web 伺服器控制項:SiteMapPathTreeViewMenu 控制項。這些 Web 伺服器控制項使用 ASP.NET 預設網站導覽提供者,或 XmlSiteMapProvider 類別,從 XML 格式的 Web.sitemap 檔讀取網站導覽資訊。

您也可以實作一個自己的網站導覽提供者。建立一個自訂網站導覽提供者的三個主要原因如下:

  • 在 ASP.NET 預設網站導覽提供者不支援的資料來源中,儲存網站導覽資訊。例如,您可能希望將網站導覽資料儲存在 Visual FoxPro 資料庫、Oracle 資料庫或其他資料來源。

  • 使用與 Web.sitemap 檔案不同的結構描述來管理巡覽資訊。例如,您可能已經有存放網站導覽資料的實作。

  • 使用動態網站導覽結構。例如,您可能希望讓每個用戶端帳戶能夠檢視不同的網站導覽。

安全性注意事項:

如果自訂的網站導覽提供者將網站導覽資料儲存在副檔名不是 .sitemap 的檔案,則實作這樣的提供者可能有安全性風險。根據預設,ASP.NET 會設定為保護具有已知副檔名 (如 .sitemap) 的檔案,使用戶端無法下載這類檔案。若要協助保護您的資料,請將任何副檔名不是 .sitemap 的自訂網站導覽資料檔置於 App_Data 資料夾中。如需詳細資訊,請參閱設定 ASP.NET 網站巡覽的安全性

必要的類別

若要實作網站導覽提供者,請建立繼承自 System.Web 命名空間之 SiteMapProvider 抽象類別的類別,然後實作由 SiteMapProvider 類別所公開的抽象成員。本主題說明對您必須從 SiteMapProvider 抽象類別實作的必要屬性和方法加以描述。若要檢視每個成員的實作,請參閱 HOW TO:實作 ASP.NET 網站導覽提供者,以取得 Microsoft Access 和文字網站導覽提供者所提供的範例程式碼。

注意事項:

SiteMapProvider 類別會在網站導覽資料結構上強制一項條件約束:只能存在一個根節點。預設 ASP.NET 網站導覽提供者的實作,也會指定在提供者範圍內的 URL 必須是唯一的,但是自訂網站導覽提供者則沒有這項限制。

必要的 SiteMapProvider 成員

下表只列出實作網站導覽提供者必要的方法。SiteMapProvider 基底類別提供最少的實作。

方法

說明

FindSiteMapNode

擷取表示頁面的 SiteMapNode 類別執行個體。這個方法是多載的。

GetChildNodes

擷取 SiteMapNode 類別特定執行個體的子節點。

GetParentNode

擷取 SiteMapNode 類別特定執行個體的父節點。

GetRootNodeCore

擷取由目前提供者管理之所有節點的根節點。各種站台巡覽類別會在內部呼叫這個方法,以確定提供者已經載入巡覽資料。這個方法不能傳回 null 節點。

如果您滿足 XmlSiteMapProvider 類別的語意,但是希望使用與 Web.sitemap 檔不同的資料存放區,您應該衍生自 StaticSiteMapProvider 類別而不是 SiteMapProvider 類別。除非實作它們,否則有些方法 (如 AddNodeRemoveNode) 會擲回 NotImplementedExceptionStaticSiteMapProvider 類別會提供所有內部邏輯,存放和搜尋節點;您只需要實作 GetRootNodeCore 方法和抽象 BuildSiteMap 方法。GetRootNodeCore 方法僅呼叫 BuildSiteMap 方法。

自訂成員

您可能需要使用 SiteMapProvider 抽象類別並未提供的額外功能,以擴展網站導覽提供者介面。如果將自訂提供者設定為預設提供者,並且將 Provider 的傳回值轉換成自訂提供者類型,則可以使用 SiteMap 類別的 Provider 屬性,存取加入至網站導覽提供者的任何公用成員。

請參閱

工作

HOW TO:實作 ASP.NET 網站導覽提供者

概念

ASP.NET 網站巡覽概觀

ASP.NET 網站導覽安全性調整

設定 ASP.NET 網站巡覽的安全性

設定資料存取的安全性

其他資源

裝載環境中 ASP.NET 應用程式的安全性