背景
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
参数的重载,您可以在其中指定有意义的查询字符串参数 viapath
和友好的页面名称 via 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
,但它已经在那里坐了很长时间而没有引起任何注意。
另一个问题是我必须将“.aspx”硬编码到页面名称上,而不是让友好的 URL 提供者决定扩展名应该是什么(或者是否完全不使用扩展名)。
我是否遗漏了什么,或者是复制核心NavigateURL
以获得对 URL 中友好页面名称的全面支持的最佳选择?