0

現在、カスタムサイトマッププロバイダーを実装しようとしています。私はそれについていくつかのチュートリアルを読み、彼らの先導に従いました。

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

ただし、サイトを使用して好きなだけナビゲートできます。例外は発生せず、デバッグコンソールにはHelloWorldがまったく表示されません。

重要なことを忘れましたか?

4

2 に答える 2

2

独自のプロバイダーを実装する代わりに、MvcSiteMapProviderを使用しました。実装する必要のある動作のカスタマイズは、動的サイトマップとカスタムSiteMapNodeVisibilityProviderを使用して1日で実現されました。

また、おそらくSQLベースでSiteMapProvider全体を実装することも検討しましたが、実装する必要がなかったことをうれしく思います。

于 2012-04-19T19:11:34.987 に答える
0

System.Web.SiteMap.RootNodeコードから呼び出してみてください。

于 2012-04-18T09:28:21.763 に答える