バックグラウンド
DotNetNuke は、URL にカスタム ページ名を付ける機能をサポートしています。これにより、URL をより人間に優しいものに/Page/itemId/14/Default.aspx
することができます。たとえば、/Page/itemId/14/My-Article.aspx
. これを実現するための API は via ですDotNetNuke.Common.Globals.FriendlyUrl
(これは単に を呼び出しますDotNetNuke.Services.Url.FriendlyUrl.FriendlyUrlProvider.FriendlyUrl
)。
このFriendlyUrl
メソッドには、path
andpageName
パラメーターを受け取るいくつかのオーバーロードがあり、意味のあるクエリ文字列パラメーターを 経由path
で指定し、わかりやすいページ名を 経由で指定できますpageName
。Bruce Chapmanの例に従うと、次のようになります。
FriendlyUrlProvider.Instance().FriendlyUrl(tab, "~/Default.aspx?TabId=" + tab.TabID, "My_Custom_Page_Name.aspx")
問題
このアプローチに関する私の問題は、URL がそのパラメーターで直接指定したパラメーターのみを取得することpath
です。で標準的で非友好的なアプローチを使用しGlobals.NavigateURL
て、現在のコンテキストとポータルの設定 (最も注目すべきは ) に基づいて追加のパラメーターを取得しますlanguage
。実装を再実装/コピーするNavigateURL
必要はありませんが、他に選択肢はありません。Bruce はDNN の Gemini イシュー トラッカーpageName
に にパラメータを追加する問題を抱えていますがGlobals.NavigateURL
、それは何の注目も集めることなく、かなり長い間そこに置かれていました。
もう 1 つの問題は、わかりやすい URL プロバイダーに拡張子を決定させるのではなく (または拡張子をまったく付けないかどうか)、ページ名に ".aspx" をハードコーディングする必要があることです。
NavigateURL
URL でわかりやすいページ名を完全にサポートするには、コアをコピーするのが最善の方法ですか?