Удаление расширения .aspx от Sitecore в трубопроводе ExecuteRequest

StackOverflow https://stackoverflow.com//questions/25030578

Вопрос

В настоящее время я пытаюсь удалить расширения .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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top