Как создать дружественный URL с пользовательским именем страницы в DotNetNuke? - PullRequest
2 голосов
/ 29 апреля 2011

Фон

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?

1 Ответ

0 голосов
/ 29 апреля 2011

Одним небольшим улучшением вышеупомянутого является вызов Globals.ApplicationURL(tabId), чтобы получить "~/Default.aspx?TabID=x" часть URL. Вам все равно придется вручную добавить параметр language, хотя ...

...