Мы работаем над продуктом, представляющим собой серию компонентов, которые могут быть установлены на разных CMS и которые предоставляют разные услуги. Мы применяем независимый от CMS подход и стараемся максимально использовать один и тот же код во всех CMS (мы стараемся избегать использования CMS API, насколько это возможно) .
Некоторая часть кода должна работать с текущим URL для некоторых перенаправлений, поэтому мы используем Request.Url.ToString()
, что отлично работает в других средах, но в Кентико вместо возврата текущей страницы мы всегда получаем ссылку на CMSPages/PortalTemplate.aspx
с параметром строки запроса aliasPath
, который содержит реальный URL. Кроме того, запрос страницы шаблона с помощью браузера приводит к ошибке 404.
Пример:
Реальный URL (это отлично работает в браузере):
(1) https://www.customer.com/Membership/Questionnaire?Id=7207f9f9-7354-df11-88d9-005056837252
Request.Url.ToString () (это дает вам ошибку 404 в браузере):
(2) https://www.customer.com/CMSPages/PortalTemplate.aspx?Id=7207f9f9-7354-df11-88d9-005056837252&aliaspath=/Membership/Questionnaire
Я заметил, что ошибка 404 явно генерируется кодом шаблона при прямом вызове. Пожалуйста, смотрите ниже код из Page_Init метод PortalTemplate.aspx.cs :
var resolvedTemplatePage = URLHelper.ResolveUrl(URLHelper.PortalTemplatePage);
if (RequestContext.RawURL.StartsWithCSafe(resolvedTemplatePage, true))
{
// Deny direct access to this page
RequestHelper.Respond404();
}
base.OnInit(e);
Итак, если я прокомментирую приведенный выше код, мое перенаправление будет работать нормально ((2) разрешается в (1)). Я знаю, что это не изящное решение, но так как я не могу / не хочу использовать Kentico API, это единственный обходной путь, который я смог найти.
Обратите внимание, что я знаю, что использование Kentico API решит проблему, поскольку я уверен, что найду метод API, который вернет реальную страницу. Я стараюсь избегать этого как можно больше.
Вопросы: я что-то ломаю? Есть ли лучший способ достичь того, чего я пытаюсь достичь? Можете ли вы подумать по любой веской причине, что я не должен делать то, что я делаю (безопасность, удобство использования и т. Д.)?
Это довольно широкий вопрос, поэтому я не смог найти никакой полезной информации о документах Kentico.
Я тестирую все это на Kentico v8.2.50 , которая является версией, которую один из моих клиентов в настоящее время имеет.
Заранее спасибо.