Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 使用angular universal的ASP.Net Core spa预渲染可以在本地工作,但不能在服务器上工作_Asp.net Core_Angular7_Angular Universal - Fatal编程技术网

Asp.net core 使用angular universal的ASP.Net Core spa预渲染可以在本地工作,但不能在服务器上工作

Asp.net core 使用angular universal的ASP.Net Core spa预渲染可以在本地工作,但不能在服务器上工作,asp.net-core,angular7,angular-universal,Asp.net Core,Angular7,Angular Universal,我正在尝试使用asp.net core 2.1在angular7上设置angular universal。预呈现在本地构建上可以完美地工作,但不会向生产服务器上的页面源添加代码,而不会出现错误或日志 由于缺少日志,我怀疑这是因为服务器模块未加载/启动,但我不知道原因。这是应该添加到web配置中的内容吗 我使用的是支持node.js和IIS节点的windows共享plesk服务器。这是我的Startup.cs中的一个片段 app.UseSpa(spa => { spa.Options

我正在尝试使用asp.net core 2.1在angular7上设置angular universal。预呈现在本地构建上可以完美地工作,但不会向生产服务器上的页面源添加代码,而不会出现错误或日志

由于缺少日志,我怀疑这是因为服务器模块未加载/启动,但我不知道原因。这是应该添加到web配置中的内容吗

我使用的是支持node.js和IIS节点的windows共享plesk服务器。这是我的Startup.cs中的一个片段

app.UseSpa(spa =>
{
    spa.Options.StartupTimeout = new System.TimeSpan(0, 0, 1000);
    spa.Options.SourcePath = "ClientApp";

    spa.UseSpaPrerendering(options =>
    {
        options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.js";
        options.BootModuleBuilder = env.IsDevelopment() ? new 
        AngularCliBuilder(npmScript: "build:ssr") : null;
        options.ExcludeUrls = new[] { "/sockjs-node" };
    });

    if (env.IsDevelopment())
    {
        spa.UseAngularCliServer(npmScript: "start");
    }
});

我相信您误用了预渲染中间件

关于预呈现:表示按需构建单页应用程序(SPA)以便可以预呈现的能力。这仅用于开发时。在制作过程中,应该已经在发布过程中创建了SPA

您应该将这段代码隐藏在下面:

env.IsDevelopment()

阅读更多

我最终意识到我有了一行
app.UseStaticFiles()
以及Startup.cs中的
app.UseSpaStaticFiles
。正在删除app.UseStaticFiles()解决了这个问题。但是,我仍然不确定这为什么不会在本地版本上引起问题。

生产机器上是否安装了.NET core托管捆绑包?对为了添加更多信息,我在Startup.cs
app.UseSpaStaticFiles()
的Configure方法中有这一行,我发现如果我注释掉这一行,那么预渲染可以将组件添加到index.html中的应用程序路径中,但也会尝试将所有其他文件放在其中。有没有排除特定文件扩展名的方法?我相信这可能与您如何在本地构建应用程序以及如何为生产环境构建应用程序有关。我假设它经过一些CI/CD管道,并在本地由npm运行build--prod生成。如果可以,请检查您的配置,将其远程导入生产服务器,检查文件的位置,并将其与本地环境进行比较。谢谢您的评论。在使用fiddler进行仔细检查之后,它实际上在index.html中返回了一个400错误,用于查找所有丢失的文件。因此,如果没有
app.UseSpaStaticFiles()
,则无法找到静态文件,但是使用
app.UseSpaStaticFiles()
它会获取所有文件,但不会预呈现页面。我相信您所说的是ispaprerenderbuilder。我正在使用ISpaPrerenderer在服务器端渲染发布期间无法生成的动态内容