0

현재 사용자 지정 사이트 맵 공급자를 구현하려고합니다. 그것에 대한 몇 가지 자습서를 읽었으며 그들의 리드를 따라갔습니다.ASP NET MVC에서 Custom SiteMapProvider를 사용하는 방법은 무엇입니까?

MyProject.Security에있는 MySiteMapProvider라는 XmlSiteMapProvider 하위 클래스를 만들었습니다.

나는 나의하여 Web.config의 system.web 섹션에 다음 코드를 추가했습니다 :

<siteMap defaultProvider="MySiteMapProvider" enabled="true"> 
     <providers> 
      <add name="MySiteMapProvider" 
       description="Custom SiteMap provider." 
       type="MyProject.Security.MySiteMapProvider " 
       siteMapFile="Web.sitemap" 
       securityTrimmingEnabled="true" /> 
     </providers> 
    </siteMap> 

하지만 내 제공자가 제대로 사용되지 않음을 확신합니다. 나는 심지어 구현으로 시작할 수 없었다. 나는 다음과 같은 (의사) 구현을 포함했는지 확인하려면

public override bool IsAccessibleToUser(System.Web.HttpContext context, System.Web.SiteMapNode node) 
    { 
     Debug.Print("Hello World"); 
     throw new Exception();    
     return base.IsAccessibleToUser(context, node); 
    } 
    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection attributes) 
    { 
     Debug.Print("Hello World"); 
     throw new Exception();  
     base.Initialize(name, attributes); 
    } 
    public override SiteMapNode BuildSiteMap() 
    { 
     Debug.Print("Hello World"); 
     throw new Exception();  
     return base.BuildSiteMap(); 
    } 

을하지만 내가 원하는대로 내가만큼 사이트를 사용하여 탐색 할 수 있습니다, 예외는 등장하지 않고 디버그 콘솔은 전혀 안녕하세요 세계를 보여줍니다.

중요한 것을 잊었습니까?

답변

2

내 공급자를 구현하는 대신 MvcSiteMapProvider과 함께했습니다. 구현해야하는 동작 사용자 지정은 동적 사이트 맵과 사용자 지정 SiteMapNodeVisibilityProvider를 사용하여 하루 만에 실현되었습니다.

나는 또한 SQL 기반으로 전체 SiteMapProvider를 구현하는 것을 고려했으며, 나는 그것을 할 필요가 없기 때문에 기쁩니다.

0

System.Web.SiteMap.RootNode 코드에서 문의하십시오.

+0

내 코드를 실행하는 것이 좋습니다. 그러나 루트 노드 만 확인합니다. 그리고이 특정 코드가 호출 될 때만 실행됩니다. 그러면 내가 어떻게 더 가겠습니까? – ckonig

관련 문제