如何在 DotNetNuke 中创建具有自定义页面名称的友好 URL?
Posted
技术标签:
【中文标题】如何在 DotNetNuke 中创建具有自定义页面名称的友好 URL?【英文标题】:How to create a friendly URL with custom page name in DotNetNuke? 【发布时间】:2011-08-15 15:23:21 【问题描述】:背景
DotNetNuke 支持为 URL 提供自定义页面名称的功能,以使 URL 更人性化,例如而不是/Page/itemId/14/Default.aspx
,你可以有/Page/itemId/14/My-Article.aspx
。实现这一点的 API 是通过DotNetNuke.Common.Globals.FriendlyUrl
(它只是调用DotNetNuke.Services.Url.FriendlyUrl.FriendlyUrlProvider.FriendlyUrl
)。
这个FriendlyUrl
方法有一些重载,它们采用path
和pageName
参数,您可以通过path
指定有意义的查询字符串参数,并通过pageName
指定友好的页面名称。在example from Bruce Chapman 之后,可能看起来像这样:
FriendlyUrlProvider.Instance().FriendlyUrl(tab, "~/Default.aspx?TabId=" + tab.TabID, "My_Custom_Page_Name.aspx")
问题
我对这种方法的问题是 URL 只获取我在 path
参数中直接指定的参数。使用Globals.NavigateURL
的标准非友好方法,我将根据当前上下文和门户设置(最值得注意的是language
)获取其他参数。我宁愿不必重新实现/复制NavigateURL
实现,但我看不到任何其他选择。 Bruce 有 an issue in DNN's Gemini issue tracker 可以将 pageName
参数添加到 Globals.NavigateURL
,但它已经坐在那里很长一段时间没有引起任何注意。
另一个问题是我必须将“.aspx”硬编码到页面名称上,而不是让友好的 URL 提供者决定扩展名应该是什么(或者是否完全不使用扩展名)。
我是否遗漏了什么,或者正在复制核心 NavigateURL
以获得对 URL 中友好页面名称的全面支持的最佳选择?
【问题讨论】:
在我的情况下,我需要为几十万个漂亮的 URL 提供便利,这些 URL 都是小写的,用连字符分隔标记。我对 DNN UrlRewrite、FriendlyURL 和一个实用函数进行了一些轻量级更新。在应用程序启动时,源/目标对被插入到应用程序状态中,其中 UrlWrite 可以将源(漂亮请求的 URL)转换为丑陋的(应用程序可读的 URL),而 FriendlyURL 则相反(以便导航菜单提供程序发出漂亮的 URL)。我的解决方案不会取代内置的 DNN 功能,只会增强它。 我已经尝试过几次来解释您的具体需求,但我不知道我的个人解决方案是否会有所帮助。如果这听起来很吸引人,请告诉我,我可以详细说明一下。我这样做是为了在未来的 DNN 版本上实现和测试大约需要 1 到 2 个小时。我不喜欢修改 DNN 核心。我希望 URL Master 能够满足我的需求,但它不适用于此应用程序。 我想要适用于所有环境的最佳解决方案(适用于我无法替换 URL 重写器的情况)。我试图了解此功能是否真的没有以任何有意义的方式内置到 DNN 中,即使有一个 API,或者我是否遗漏了一些可以在不将 DNN 核心排除在外的情况下使其工作的东西。 【参考方案1】:对上述内容的一个小改进是调用Globals.ApplicationURL(tabId)
来获取URL 的"~/Default.aspx?TabID=x"
部分。您仍然需要手动添加 language
参数,不过...
【讨论】:
以上是关于如何在 DotNetNuke 中创建具有自定义页面名称的友好 URL?的主要内容,如果未能解决你的问题,请参考以下文章