Как использовать 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, и я рад, что мне не пришлось это делать.