Фон
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
. Следуя примеру Брюса Чепмена , это может выглядеть примерно так:
FriendlyUrlProvider.Instance().FriendlyUrl(tab, "~/Default.aspx?TabId=" + tab.TabID, "My_Custom_Page_Name.aspx")
Задача
Моя проблема с этим подходом заключается в том, что URL получает только те параметры, которые я непосредственно указываю в этом параметре path
. Используя стандартный, не дружественный подход с Globals.NavigateURL
, я получу дополнительные параметры, основанные на текущем контексте и настройках портала (прежде всего, language
). Я бы предпочел, чтобы не пришлось переопределять / копировать реализацию NavigateURL
, но я не вижу другого выбора. У Брюса есть проблема в системе отслеживания проблем Близнецов DNN , которая добавила бы pageName
параметр к Globals.NavigateURL
, но он долго сидел там, не получая никакого внимания.
Другая проблема заключается в том, что мне приходится жестко кодировать «.aspx» в имени страницы, а не позволять провайдеру дружественных URL-адресов решать, каким должно быть расширение (или вообще не использовать расширение).
Я что-то упустил или копирую ядро NavigateURL
мой лучший вариант для получения полной поддержки дружественных имен страниц в URL?