Проблема с prerender.io, всегда отображающим угловой маршрут по умолчанию для списка маршрутов на стороне клиента.

Просто хочу сказать, что мне очень нравится prerender.io, но в настоящее время у меня с ним проблема, и мне интересно, может быть, я делаю что-то не так, и люди с большим опытом работы с сервисом могут мне помочь.

У меня такая же проблема с сайтом prerender.io, а также с коробкой Debian Linux, которую я настраиваю с помощью prerender для локального выполнения.

Мой новый сайт представляет собой гибрид ASP.Net MVC и angular, где angular представляет рабочие процессы (или категории контента) в маршрутах MVC на сервере.

Пример категории контента:

http://[somesitename]/PublicContent/#!/news

http://[somesitename]/PublicContent/#!/welcome

Маршрут на стороне сервера MVC:

http://[somesitename]/PublicContent

а #!/news и #!/welcome — это маршруты приложений angular, и welcome также является маршрутом по умолчанию.

Когда я отправляю свой URL-адрес в службу prerender.io или в свой локальный экземпляр:

http://service.prerender.io/http://[somesitename]/PublicContent/#!/news

Служба предварительного рендеринга всегда рендерит только:

http://[somesitename]/PublicContent

и игнорирует маршрут на стороне клиента после #!

поэтому для всех моих страниц для каждого маршрута MVC я просто получаю маршрут по умолчанию, отображаемый несколько раз...

Это ошибка с prerender.io? Или у меня что-то не так настроено?

У меня есть:

<meta name="fragment" content="!">

в голове для всех моих страниц, если бы это имело значение.


person James Eby    schedule 08.06.2014    source источник


Ответы (1)


Поговорил с ребятами на prerender.io, и оказалось, что модификация, которую я сделал в промежуточном программном обеспечении Asp.Net MVC, где он полностью удалял ?_escpaed_fragment_=/, была неправильной модификацией этого кода, которая сам по себе был неправильным (базовый код удалил ?_escpaed_fragment_=/ и заменил его ничем, я изменил код, чтобы удалить ?_escpaed_fragment_=/ и заменить его на # !).

Служба prerender.io ожидала, что ?_escpaed_fragment_=/ существует в URL-адресе, и если она найдет его, то заменит его на #!, прежде чем вызывать ваш веб-сайт для кэширования страницы. Он не ожидает найти #!, поэтому он не будет правильно обрабатывать URL-адрес, если он там есть.

Поэтому, если вы используете промежуточное ПО Asp.Net MVC, вы должны закомментировать следующий код из PrerenderModule.cs:

        // Remove the _escaped_fragment_ from the URL if it exists!
        var escapedFull = "?" + _Escaped_Fragment + "=/";
        if (url.Contains(escapedFull))
        {
            url = url.Replace(escapedFull, string.Empty);
        }
person James Eby    schedule 10.06.2014