ASP.NET 사이트 맵 공급자 구현
업데이트: 2007년 11월
ASP.NET 사이트 탐색은 SiteMapPath, TreeView 및 Menu 컨트롤 같이 웹 페이지에 탐색 구조를 표시하는 여러 웹 서버 컨트롤을 제공합니다. 이러한 웹 서버 컨트롤은 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 추상 클래스에서 구현해야 하는 필수 속성 및 메서드를 설명합니다. 각 멤버의 구현을 검토하려면 방법: ASP.NET 사이트 맵 공급자 구현에서 Microsoft Access 및 텍스트 기반 사이트 맵 공급자에 대해 제공된 예제 코드를 참조하십시오.
참고: |
---|
SiteMapProvider 클래스는 사이트 맵 데이터 구조에 하나의 루트 노드만 존재할 수 있도록 하는 한 가지 제약 조건을 적용합니다. 또한 기본 ASP.NET 사이트 맵 공급자 구현에서는 URL이 공급자 범위 내에서 고유하도록 지정되어 있지만 사용자 지정 사이트 맵 공급자에서는 이러한 제한이 없습니다. |
필수 SiteMapProvider 멤버
다음 표에서는 사용자 지정 사이트 맵 공급자를 구현하는 데 필요한 메서드만을 보여 줍니다. SiteMapProvider 기본 클래스는 최소 구현을 제공합니다.
메서드 |
설명 |
---|---|
페이지를 나타내는 SiteMapNode 클래스의 인스턴스를 검색합니다. 이 메서드는 오버로드됩니다. |
|
SiteMapNode 클래스의 특정 인스턴스에 대한 자식 노드를 검색합니다. |
|
SiteMapNode 클래스의 특정 인스턴스에 대한 부모 노드를 검색합니다. |
|
현재 공급자가 관리하는 모든 노드의 루트 노드를 검색합니다. 이 메서드는 공급자가 탐색 데이터를 로드했는지 확인하기 위해 다양한 사이트 탐색 클래스에서 내부적으로 호출됩니다. 이 메서드는 null 노드를 반환하지 않아야 합니다. |
XmlSiteMapProvider 클래스의 의미는 적절하지만 Web.sitemap 파일이 아닌 다른 데이터 저장소를 사용하려는 경우 SiteMapProvider 클래스 대신 StaticSiteMapProvider 클래스에서 파생시켜야 합니다. 그렇지 않은 경우 AddNode 및 RemoveNode 메서드 등의 일부 메서드에서는 자신이 구현되지 않으면 NotImplementedException을 throw합니다. StaticSiteMapProvider 클래스는 노드를 저장 및 검색하는 데 필요한 모든 내부 논리를 제공하므로 GetRootNodeCore 메서드 및 추상 BuildSiteMap 메서드만 구현하면 됩니다. GetRootNodeCore 메서드를 사용하면 BuildSiteMap 메서드를 간단히 호출할 수 있습니다.
사용자 지정 멤버
SiteMapProvider 추상 클래스에서 제공되지 않는 추가 기능을 사용하여 사이트 맵 공급자 인터페이스를 확장해야 하는 경우도 있습니다. 사용자 지정 공급자를 기본 공급자로 구성하고 Provider의 반환 값을 사용자 지정 공급자의 형식으로 캐스팅하면 SiteMap 클래스의 Provider 속성을 사용하여 사이트 맵 공급자에 추가하는 모든 공용 멤버에 액세스할 수 있습니다.