Удаление расширения .aspx от Sitecore в трубопроводе ExecuteRequest
-
21-12-2019 - |
Вопрос
В настоящее время я пытаюсь удалить расширения .aspx от URL Sitecore.Блог предлагает, что изменение следующего будет исправить эту проблему:
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"
.
Проблема в том, что это не работает для всех кодов на наших сайтах, так как некоторые пользовательские элементы управления усилиют использование .aspx.
Что я думал, это то, что если бы я мог попасть в трубопровод до отправки ответа обратно пользователю, я мог бы изменить URL-адрес, который больше SEO дружелюбна (нет .aspx), я пытаюсь сделать этоСледующий код
public class CustomExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
protected override void PerformRedirect(string url)
{
base.PerformRedirect(url.Replace(".aspx" , ""));
}
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
PerformRedirect(args.Url.FilePathWithQueryString.Replace(".aspx", ""));
//args.Url.FilePathWithQueryString = args.Url.FilePathWithQueryString.Replace(".aspx", "");
//base.Process(args);
}
}
.
Код ударил, и это решение работает, однако он выполняет перенаправление, которое на самом деле не то, что я хочу сделать, я бы предпочел просто регулярное запрос с убранным URL.Проблема в том, что переменная ARGS имеет поле только для чтения (прокомментировано ниже), которое используется для фактического создания URL.
У кого-нибудь есть какие-либо идеи относительно того, как я могу изменить URL здесь, или, возможно, где-то еще в трубопроводе?
Решение
Что вы делаете внутри httprequestpipine, безусловно, не правильный способ изменить ссылки.Как и в случае любого веб-приложения, любые ссылки на странице возвращаются к клиенту как содержимое HTTP-запроса.Перенаправление во время запроса не изменит оказанный контент.
единственный способ сделать это сложный путь:
- .
- Найти все места в вашем источнике, генерирующие ссылки, содержащие .aspx.Поиск "ASPX" внутри решения может помочь
- Найти все ссылки на urloptions и linkmanager и проверьте, если addaspxextension= true устанавливается вручную в виде URLOPtions.
Что-то вроде этого всегда будет производить .aspx, заканчивающийся, например:
var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;
LinkManager.GetItemUrl(item, urlOptions);
. Другие советы
Либо жесткий способ изменить все ваши ссылки на использование диспетчера ссылок или если вы привязаны к времени, то предложите что-то, возможно, вне SiteCore и используйте модуль IIS URLREWRITE.