如何在 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 方法有一些重载,它们采用pathpageName 参数,您可以通过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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中创建具有圆形边缘的自定义容器?

如何在文档目录中创建具有自定义扩展名的文件?

如何在 Django 中创建自定义 403 页面?

如何在 Swift 中创建具有自定义形状的 UIButton?

如何在 IIS 中创建多个自定义 503 页面

如何在 Spring Boot 中创建自定义错误页面