背景
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中友好页面名称的全面支持的最佳选择? 最佳答案
上面的一项小改进是调用Globals.ApplicationURL(tabId)
以获得URL的"~/Default.aspx?TabID=x"
部分。不过,您仍然必须手动添加language
参数。
关于c# - 如何在DotNetNuke中使用自定义页面名称创建友好的URL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5834783/