2

只想说我真的很喜欢 prerender.io,但我目前遇到了问题,我想知道我是否做错了什么,有更多服务经验的人可以帮助我。

我对 prerender.io 站点以及我设置的用于本地执行的 prerender 的 Debian Linux 机器也有同样的问题。

我的新站点是 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="!">

如果这很重要,请在我所有页面的头部。

4

1 回答 1

6

与 prerender.io 的家伙交谈,看来我对 Asp.Net MVC 中间件所做的修改,它正在删除?_escpaed_fragment_=/完全是对这段代码的错误修改,它本身是不正确的(基本代码删除?_escpaed_fragment_=/并将其替换为空,我修改了代码以删除?_escpaed_fragment_=/并将其替换为#!)。

prerender.io 服务期望?_escpaed_fragment_=/存在于 URL 中,如果找到它,它将用#! 在调用您的网站缓存页面之前。它不希望找到#! ,因此如果 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);
        }
于 2014-06-10T19:03:09.997 回答