この問題について何時間も考えてきましたが、XML サイト マップ機能は URL 属性を持つ外部 URL を受け入れるように更新されましたが、その機能は DynamicNode を介した動的定義に拡張されていないように見えます。
メニューを共有するいくつかのアプリケーションがあるため、これらのメニュー項目に対して単一の定義が必要であり、それぞれがイントラネット内のアプリケーションの 1 つを指しています。現在、(ASP.NET 用に) XML ファイルを各アプリケーションに展開する必要があるカスタム サイト マップを使用しています。MVC 実装で項目を動的に (おそらくデータベースから) 読み取る必要があります。
DynamicNode には URL プロパティがないため、パスが仮想であり、他のプロパティ (コントローラー、アクション、ルート) に基づいていることが明らかに必要です。「HTTP」の「アクション」を調べるために UrlResolver を実装しようとしましたが、これは機能し、URL を変更せずに返しました。しかし、私は恐ろしいものを受け取ります
「http://site.com/Appは有効な仮想パスではありません。」
エラー。作成者が 3.1.0 で XML プロパティに導入した変更は、動的な同等物に変換されていないようです。誰でも私を助けることができますか?これは、デフォルトのクラスを拡張するために私が書いたコードです。このコードは実行され、正常に動作します。ResolveUrl が HTTP を返した後、エラーが発生するので、何かが足りないか、実行できないと思います。
public class DynamicSiteMapNodeProvider : DynamicNodeProviderBase
{
override public IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
var nodes = new List<DynamicNode>();
nodes.Add(new DynamicNode
{
Key = "Dynamic1",
Title = "Dynamic One!",
Action = "http://my.site.com/MyApp"
});
return nodes;
}
}
public class FlexibleSiteMapUrlResolver: DefaultSiteMapNodeUrlResolver
{
public override string ResolveUrl(MvcSiteMapNode mvcSiteMapNode, string area, string controller, string action, IDictionary<string, object> routeValues)
{
// when action value is clearly a web site url, simply accept it.
if (action.Substring(0, 5).ToLower() == "http:")
{
return action;
}
return base.ResolveUrl(mvcSiteMapNode, area, controller, action, routeValues);
}
}
2013/5/15: これを手伝ってくれる人はいませんか?