Compartilhar via


Implementando provedores site-Map em ASP.NET

Navegação em sites ASP.NET fornece vários controles de servidor Web que exibem uma estrutura de navegação em uma página da Web: the SiteMapPath, TreeView, e Menu controles do servidor Web .esses controles usar o provedor de MAP de site do ASP.NET padrão, ou o XmlSiteMapProvider classe, leiam informações do MAP de site do arquivo Web.sitemap formatada em XML.

Como alternativa, você pode implementar seu próprio provedor de mapa de site.Três motivos principais para criar um provedor de mapa de site personalizado são os seguintes:

  • Para armazenar informações de mapa de sites em um fonte de dados que não é suportada pelo provedor padrão de mapas de site do ASP.NET.Por exemplo, convém armazenar seus dados de mapa de sites em um banco de dados do Visual FoxPro, um banco de dados Oracle ou outras fontes de dados.

  • Para gerenciar informações de navegação usando um esquema que seja diferente do esquema usado para o arquivo Web.sitemap.Por exemplo, você pode ter uma implementação existente para armazenar dados de mapa de sites.

  • Para usar uma estrutura de mapa de site dinâmica.Por exemplo, convém cada conta de cliente ser capaz de exibir um mapa de sites diferente.

Observação de segurança:

A implementação de um provedor de mapa do site personalizado que armazene dados de mapa do site em um arquivo com uma extensão de nome de arquivo diferente de .sitemap é um risco de segurança em potencial.Por padrão, o ASP.NET é configurado para proteger arquivos com extensões de nome de arquivo conhecidas— como .sitemap — de serem descarregados por um cliente.Para ajudar a proteger seus dados, coloque quaisquer arquivos de dados de mapa do site personalizados que tenham uma extensão de nome de arquivo diferente de .sitemap na pasta App_Data.Para obter mais informações, consulte Tornando navegação em sites do ASP.NET seguro.

Classes Necessárias

Para implementar um provedor de mapa de sites, crie uma classe que herda a classe abstrata SiteMapProvider do namespace System.Web, e implemente os membros abstratos que são expostos pela classe SiteMapProvider.Este tópico descreve as propriedades necessárias e métodos que você deve implementar das classes abstratas SiteMapProvider.Para revisar uma implementação de cada membro, consulte o código de exemplo fornecido para o Microsoft Access e provedores de mapas de site texto baseados em Como: Implementar provedores de mapas de site ASP.NET .

Observação:

The SiteMapProvider classe impõe uma restrição com a estrutura dos dados do MAP de site: somente um nó raiz pode existir.A implementação do provedor de mapa de site padrão do ASP.NET também especifica que URLs deve ser exclusivas dentro do escopo de provedor, mas provedores de mapa de site personalizados não tem essa limitação.

Membros necessários do SiteMapProvider

A tabela a seguir lista somente os métodos que são necessários para implementar um provedor de mapa de site personalizado.A classe base SiteMapProvider fornece um mínimo de implementação.

Método

Descrição

FindSiteMapNode

Recupera uma instância da classe SiteMapNode, que representa uma página.Este método está sobrecarregado.

GetChildNodes

Recupera os nós filho de uma instância específica da classe SiteMapNode.

GetParentNode

Recupera o nó pai de uma instância específica da classe SiteMapNode.

GetRootNodeCore

Recupera o nó raiz de todos os nós que são gerenciados pelo provedor atual.Esse método é chamado internamente pelas várias classes de navegação do site para garantir que os dados da navegação foram carregados pelo provedor.Este método não deve retornar um nó nulo.

Se você estiver satisfeito com a semântica da classe XmlSiteMapProvider mas deseja usar um armazenamento de dados diferente do que o arquivo Web.sitemap, então você deve derivar da classe StaticSiteMapProvider em vez da classe SiteMapProvider.Caso contrário, alguns métodos, como os métodos AddNode e RemoveNode irão acionar um NotImplementedException a menos que eles sejam implementados.A classe StaticSiteMapProvider fornece toda a lógica interna para nós de armazenamento e pesquisa; você precisa apenas implementar o método GetRootNodeCore e o método BuildSiteMap abstrato.O método GetRootNodeCore pode chamar o método BuildSiteMap de forma simples.

Membros Personalizados

Talvez você precise estender as interfaces do provedor de mapa de sites com funcionalidade adicional não fornecida pelas classes abstratas SiteMapProvider.Se o provedor personalizado é configurado para ser o provedor padrão e a valor de retorno de Provider é convertido para o tipo de provedor personalizado, então quaisquer membros públicos que você adiciona ao seu provedor de mapa de site podem ser acessados usando a propriedade Provider da classe SiteMap.

Consulte também

Tarefas

Como: Implementar provedores de mapas de site ASP.NET

Conceitos

Visão geral sobre navegação em sites do ASP.NET

Cortes de segurança em mapas de site no ASP.NET

Tornando navegação em sites do ASP.NET seguro

Proteção de acesso a dados

Outros recursos

Segurança de aplicativos ASP.NET em ambientes hospedados