我目前正在尝试实现自定义站点地图提供程序。我已经阅读了几个关于它的教程,并遵循了他们的领导。
我创建了一个名为MySiteMapProvider的XmlSiteMapProvider子类,它位于MyProject.Security中。
我已将以下代码添加到我的 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();
}
但是我可以随心所欲地使用该站点和导航,没有出现异常,调试控制台根本不显示 Hello World。
我忘记了什么重要的事情吗?
我没有实现我自己的 Provider,而是使用了 MvcSiteMapProvider。我需要实现的行为的定制是在一天内通过动态站点地图和自定义站点地图节点可见性提供程序实现的。
我还考虑过实现整个SiteMapProvider,也许是基于SQL的,我很高兴我不必这样做。
尝试从代码调用System.Web.SiteMap.RootNode
。