Поделиться через


Реализация поставщиков карт веб-узлов ASP.NET

Обновлен: Ноябрь 2007

Структура переходов веб-узла ASP.NET предоставляет несколько серверных веб-элементов управления, которые отображают структуру переходов на веб-странице: это элементы управления SiteMapPath, TreeView и Menu. Эти серверные веб-элементы управления используют поставщик карты веб-узла ASP.NET по умолчанию (класс XmlSiteMapProvider) для чтения информации карты веб-узла из файла Web.sitemap в формате XML.

Также можно реализовать собственный поставщик карты веб-узла. Существует три основные причины для создания пользовательского поставщика карты веб-узла:

  • Хранение сведений карты веб-узла в источнике данных, который не поддерживается поставщиком карты веб-узла ASP.NET по умолчанию. Например, может потребоваться сохранить данные карты веб-узла в базе данных Visual FoxPro, базе данных Oracle или другом источнике данных.

  • Управление информацией о переходах веб-узла с помощью схемы, которая отличается от используемой в файле Web.sitemap. Например, можно использовать существующую реализацию для хранения данных карты веб-узла.

  • Использование динамической структуры карты веб-узла. Например, может потребоваться отображение различных карт веб-узла для различных клиентских учетных записей.

ms178431.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Реализация пользовательского поставщика карты узла, которая хранит данные о структуре веб-узла в файле с расширением SITEMAP, является потенциальной угрозой безопасности. По умолчанию сервер ASP.NET настроен так, чтобы не допускать загрузку клиентом файлов с известными расширениями, такими как SITEMAP. Чтобы защитить данные, следует помещать все пользовательские файлы с данными о структуре веб-узла с расширением, отличным от SITEMAP, в папку App_Data. Дополнительные сведения см. в разделе Безопасность системы навигации веб-узла ASP.NET.

Необходимые классы

Для реализации поставщика карты веб-узла создайте класс, который наследуется от абстрактного класса SiteMapProvider из пространства имен System.Web, а затем реализуйте абстрактные члены, которые предоставляются классом SiteMapProvider. В этом разделе описаны свойства и методы абстрактных классов SiteMapProvider, которые необходимо реализовать. Сведения о реализации каждого члена см. в примере кода, предоставленном для текстовых поставщиков карты веб-узла и поставщиков карты веб-узла Microsoft Access в Практическое руководство. Реализация поставщиков карт веб-узла ASP.NET.

ms178431.alert_note(ru-ru,VS.90).gifПримечание.

Класс SiteMapProvider накладывает одно ограничение на структуру данных карты веб-узла: может существовать только один корневой узел. Для реализации поставщика карты веб-узла ASP.NET по умолчанию URL-адреса должны быть уникальными в области действия поставщика, однако данное ограничение не относится к пользовательским поставщикам карты веб-узла.

Обязательные члены SiteMapProvider

В следующей таблице перечислены методы, которые необходимы для реализации пользовательского поставщика карты веб-узла. Базовый класс SiteMapProvider предоставляет минимальную реализацию.

Метод

Описание

FindSiteMapNode

Извлекает экземпляр класса SiteMapNode, который представляет страницу. Этот метод является перегруженным.

GetChildNodes

Извлекает дочерние узлы конкретного экземпляра SiteMapNode.

GetParentNode

Извлекает родительский узел конкретного экземпляра класса SiteMapNode.

GetRootNodeCore

Извлекает корневой узел для всех узлов, которыми управляет текущий поставщик карты веб-узла. Этот метод вызывается внутренне классами переходов веб-узла, чтобы обеспечить загрузку данных о переходах поставщиком. Этот метод не должен возвращать узел со значением NULL.

Если достигнута необходимая семантика класса XmlSiteMapProvider, но тем не менее требуется хранилище данных, отличное от файла Web.sitemap, то следует создать производный класс от класса StaticSiteMapProvider, а не SiteMapProvider. В противном случае некоторые методы, например AddNode и RemoveNode, могут вызвать исключение NotImplementedException, если только они не реализуются. Класс StaticSiteMapProvider содержит всю необходимую внутреннюю логику для хранения и поиска узлов. Необходимо только реализовать метод GetRootNodeCore или абстрактный метод BuildSiteMap. Метод GetRootNodeCore может просто вызвать метод BuildSiteMap.

Пользовательские члены

Может потребоваться расширить интерфейсы поставщика карты веб-узла, включив дополнительную функциональную возможность, которая не предоставляется абстрактными классами SiteMapProvider. Если пользовательский поставщик настроен в качестве поставщика по умолчанию и возвращаемое значение Provider преобразуется к типу пользовательского поставщика, к любым общим членам, добавленным к поставщику карты веб-узла, можно обращаться с помощью свойства Provider класса SiteMap.

См. также

Задачи

Практическое руководство. Реализация поставщиков карт веб-узла ASP.NET

Основные понятия

Общие сведения об структуре переходов веб-узла ASP.NET

Фильтрация карты веб-узла ASP.NET по ролям безопасности

Безопасность системы навигации веб-узла ASP.NET

Безопасность доступа к данным

Другие ресурсы

Безопасность приложений ASP.NET в средах выполнения