实现 ASP.NET 站点地图提供程序

更新:2007 年 11 月

ASP.NET 站点导航提供了几个在网页上显示导航结构的 Web 服务器控件:SiteMapPathTreeViewMenu 控件。这些 Web 服务器控件使用 ASP.NET 默认站点地图提供程序(或 XmlSiteMapProvider 类)从 XML 格式的 Web.sitemap 文件中读取站点地图信息。

或者,可以实现您自己的站点地图提供程序。创建自定义站点地图提供程序的三个主要理由如下:

  • 为了将站点地图信息存储在 ASP.NET 默认站点地图提供程序不支持的数据源中。例如,您可能希望将站点地图数据存储在 Visual FoxPro 数据库、Oracle 数据库或其他数据源中。

  • 为了使用与 Web.sitemap 文件所使用的架构不同的架构来管理导航信息。例如,您可能拥有一个用于存储站点地图数据的现有实现。

  • 为了使用动态站点地图结构。例如,您可能希望每个客户端帐户能够查看不同的站点地图。

ms178431.alert_security(zh-cn,VS.90).gif安全说明:

实现自定义的站点地图提供程序时,如果存储站点地图数据的文件的扩展名不是 .sitemap,则会有潜在安全风险。默认情况下,ASP.NET 配置为阻止客户端下载具有已知文件扩展名(如 .sitemap)的文件。为帮助保护您的数据,可将文件扩展名不是 .sitemap 的所有自定义站点地图数据文件放入 App_Data 文件夹中。有关更多信息,请参见保证 ASP.NET 站点导航的安全

必需的类

若要实现站点地图提供程序,请创建一个从 System.Web 命名空间继承 SiteMapProvider 抽象类的类,然后实现由 SiteMapProvider 类公开的抽象成员。此主题描述必需的属性和必须从 SiteMapProvider 抽象类实现的方法。若要检查每个成员的实现,请参见如何:实现 ASP.NET 站点地图提供程序中为基于 Microsoft Access 和基于文本的站点地图提供程序提供的示例代码。

ms178431.alert_note(zh-cn,VS.90).gif说明:

SiteMapProvider 类对站点地图数据的结构施加了一个约束:只能存在一个根节点。默认 ASP.NET 站点地图提供程序的实现还指定 URL 在提供程序的范围内必须是唯一的,但是自定义站点地图提供程序没有此限制。

必需的 SiteMapProvider 成员

下表只列出了实现自定义站点地图提供程序所必需的方法。SiteMapProvider 基类提供了一个最小实现。

方法

说明

FindSiteMapNode

检索 SiteMapNode 类的实例,该类表示一个页。此方法是重载方法。

GetChildNodes

检索 SiteMapNode 类的特定实例的子节点。

GetParentNode

检索 SiteMapNode 类的特定实例的父节点。

GetRootNodeCore

检索由当前提供程序管理的所有节点的根节点。此方法由各种站点导航类进行内部调用,以确保导航数据已由提供程序加载。此方法不得返回空节点。

如果对 XmlSiteMapProvider 类的语义满意但是要使用与 Web.sitemap 文件不同的数据存储,则应从 StaticSiteMapProvider 类而不是 SiteMapProvider 类进行派生。否则,在某些方法(如 AddNodeRemoveNode 方法)尚未实现时会引发 NotImplementedExceptionStaticSiteMapProvider 类提供了用于存储和搜索节点的所有内部逻辑;您只需实现 GetRootNodeCore 方法和 BuildSiteMap 抽象方法。GetRootNodeCore 方法只能调用 BuildSiteMap 方法。

自定义成员

您可能需要用 SiteMapProvider 抽象类没有提供的附加功能来扩展站点地图提供程序接口。如果自定义提供程序被配置为默认提供程序且 Provider 的返回值被强制转换为自定义提供程序的类型,则可以使用 SiteMap 类的 Provider 属性访问添加到站点地图提供程序的任何公共成员。

请参见

任务

如何:实现 ASP.NET 站点地图提供程序

概念

ASP.NET 站点导航概述

ASP.NET 站点地图安全性调整

保证 ASP.NET 站点导航的安全

保证数据访问的安全

其他资源

寄宿环境中的 ASP.NET 应用程序安全性