背景

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中友好页面名称的全面支持的最佳选择?

最佳答案

上面的一项小改进是调用Globals.ApplicationURL(tabId)以获得URL的"~/Default.aspx?TabID=x"部分。不过,您仍然必须手动添加language参数。

关于c# - 如何在DotNetNuke中使用自定义页面名称创建友好的URL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5834783/

10-12 15:36