Реализация поставщиков карт веб-узлов ASP.NET
Обновлен: Ноябрь 2007
Структура переходов веб-узла ASP.NET предоставляет несколько серверных веб-элементов управления, которые отображают структуру переходов на веб-странице: это элементы управления SiteMapPath, TreeView и Menu. Эти серверные веб-элементы управления используют поставщик карты веб-узла ASP.NET по умолчанию (класс XmlSiteMapProvider) для чтения информации карты веб-узла из файла Web.sitemap в формате XML.
Также можно реализовать собственный поставщик карты веб-узла. Существует три основные причины для создания пользовательского поставщика карты веб-узла:
Хранение сведений карты веб-узла в источнике данных, который не поддерживается поставщиком карты веб-узла ASP.NET по умолчанию. Например, может потребоваться сохранить данные карты веб-узла в базе данных Visual FoxPro, базе данных Oracle или другом источнике данных.
Управление информацией о переходах веб-узла с помощью схемы, которая отличается от используемой в файле Web.sitemap. Например, можно использовать существующую реализацию для хранения данных карты веб-узла.
Использование динамической структуры карты веб-узла. Например, может потребоваться отображение различных карт веб-узла для различных клиентских учетных записей.
Примечание о безопасности. |
---|
Реализация пользовательского поставщика карты узла, которая хранит данные о структуре веб-узла в файле с расширением SITEMAP, является потенциальной угрозой безопасности. По умолчанию сервер ASP.NET настроен так, чтобы не допускать загрузку клиентом файлов с известными расширениями, такими как SITEMAP. Чтобы защитить данные, следует помещать все пользовательские файлы с данными о структуре веб-узла с расширением, отличным от SITEMAP, в папку App_Data. Дополнительные сведения см. в разделе Безопасность системы навигации веб-узла ASP.NET. |
Необходимые классы
Для реализации поставщика карты веб-узла создайте класс, который наследуется от абстрактного класса SiteMapProvider из пространства имен System.Web, а затем реализуйте абстрактные члены, которые предоставляются классом SiteMapProvider. В этом разделе описаны свойства и методы абстрактных классов SiteMapProvider, которые необходимо реализовать. Сведения о реализации каждого члена см. в примере кода, предоставленном для текстовых поставщиков карты веб-узла и поставщиков карты веб-узла Microsoft Access в Практическое руководство. Реализация поставщиков карт веб-узла ASP.NET.
Примечание. |
---|
Класс SiteMapProvider накладывает одно ограничение на структуру данных карты веб-узла: может существовать только один корневой узел. Для реализации поставщика карты веб-узла ASP.NET по умолчанию URL-адреса должны быть уникальными в области действия поставщика, однако данное ограничение не относится к пользовательским поставщикам карты веб-узла. |
Обязательные члены SiteMapProvider
В следующей таблице перечислены методы, которые необходимы для реализации пользовательского поставщика карты веб-узла. Базовый класс SiteMapProvider предоставляет минимальную реализацию.
Метод |
Описание |
---|---|
Извлекает экземпляр класса SiteMapNode, который представляет страницу. Этот метод является перегруженным. |
|
Извлекает дочерние узлы конкретного экземпляра SiteMapNode. |
|
Извлекает родительский узел конкретного экземпляра класса SiteMapNode. |
|
Извлекает корневой узел для всех узлов, которыми управляет текущий поставщик карты веб-узла. Этот метод вызывается внутренне классами переходов веб-узла, чтобы обеспечить загрузку данных о переходах поставщиком. Этот метод не должен возвращать узел со значением 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