私が継承した Web アプリケーションには、渡されたオブジェクトの状態に基づいてアクセスする必要がある URL を決定するページが含まれています。
URL はサイトマップ内に保持され、それらすべてを取得するメソッドがあります。
private Dictionary<string, string> GetUrls() {
var urls = new Dictionary<string, string>();
var provider = SiteMap.Provider;
var page1 = provider.FindSiteMapNodeFromKey("page1");
var page2 = provider.FindSiteMapNodeFromKey("page2");
if (page1 == null || page2 == null)
{
throw new ApplicationException("Pages not found in sitemap");
}
urls["page1URL"] = page1.Url.ToString(CultureInfo.InvariantCulture);
urls["page2URL"] = page2.Url.ToString(CultureInfo.InvariantCulture);
return urls;
}
残念ながら、このメソッド内では、page1 と page2 は常に null
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" enableLocalization="true">
<siteMapNode resourceKey="Concessions" rule="AllowRead">
<siteMapNode url="/page1.aspx" resourceKey="page1" rule="AllowAuthorised"/>
<siteMapNode url="/page2.aspx" resourceKey="page2" rule="AllowAuthorised"/>
</siteMapNode>
</siteMap>
このプロセスを通じてデバッグを試みましたが、問題に近づきません。要約すると、サイトマップ内で定義されたページの URL を返すには、このメソッドが必要です。