Как использовать Custom SiteMapProvider в ASP NET MVC?

В настоящее время я пытаюсь реализовать пользовательский поставщик SiteMap. Я прочитал несколько уроков об этом и последовал их примеру.

Я создал подкласс XmlSiteMapProvider с именем MySiteMapProvider, который находится в MyProject.Security.

Я добавил следующий код в раздел system.web моего Web.config:

 <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();
    }

Но я могу использовать сайт и перемещаться столько, сколько захочу, никаких исключений не возникает, и консоль отладки вообще не показывает Hello World.

Я забыл что-то важное?

2 ответа

Решение

Вместо того, чтобы реализовывать свой собственный поставщик, я пошел вместе с MvcSiteMapProvider. Настройка поведения, которое мне нужно было реализовать, была реализована за один день с использованием динамических файлов Sitemap и пользовательского SiteMapNodeVisibilityProvider.

Я также рассмотрел реализацию всего SiteMapProvider, возможно, на основе SQL, и я рад, что мне не пришлось это делать.

Попробуйте позвонить System.Web.SiteMap.RootNode из кода.

Другие вопросы по тегам