ASP.Net MVC Core:在50秒的超时时间内,预渲染生成过程未完成

时间:2018-07-03 19:32:33

标签: angular asp.net-core angular-cli angular-cli-v6

我有ASP.Net MVC Core(2.1.0)和SPA Prerendering。

我在JWT令牌中间件中的“ await next()”行中超时。

当我将@ angular / cli更新到最新版本(v6.0.8)时,我开始收到错误消息,该版本还添加了@ angular-devkit / build-angular(v0.6.8)。

运行“ ng build”时没有任何错误。

public static class JwtTokenMiddleware
{
    public static IApplicationBuilder UseJwtTokenMiddleware(this IApplicationBuilder app, string schema = JwtBearerDefaults.AuthenticationScheme)
    {
        return app.Use(async (ctx, next) =>
        {
            if (ctx.User.Identity?.IsAuthenticated != true)
            {
                var result = await ctx.AuthenticateAsync(schema);
                if (result.Succeeded && result.Principal != null)
                {
                    ctx.User = result.Principal;
                }
            }

            await next();
        });
    }
}

Stacktrace:

  

System.TimeoutException:预呈现生成过程   在50秒的超时时间内未完成。检查   日志输出以获取错误信息。在   Microsoft.AspNetCore.SpaServices.Extensions.Util.TaskTimeoutExtensions.WithTimeout(任务   任务,TimeSpan timeoutDelay,字符串消息)在   Microsoft.AspNetCore.Builder.SpaPrerenderingExtensions。<> c__DisplayClass0_0。 d.MoveNext()   ---从上一个引发异常的位置开始的堆栈跟踪-   Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext   httpContext)   Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext   上下文)   MyProject.JwtTokenMiddleware。<> c__DisplayClass0_0。 d.MoveNext()   在   /MyProject/UseJwtTokenMiddleware.cs:line   23   ---从上一个引发异常的位置开始的堆栈跟踪-   Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext   上下文)   Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext   上下文)   Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext   上下文)

更新:

angular-cli升级替换了一些设置。原始.angular-cli.json文件具有服务器端渲染文件夹的设置。升级重写了新的angular.json文件,该文件消失了。这就是ASP.Net找不到它的原因。现在,我必须将SSR设置放回angular.json文件中。

更新2:

https://angular.io/guide/universal#angular-cli-configuration处的文档概述了放置在angular.json中的内容。

2 个答案:

答案 0 :(得分:0)

startup.cs文件中,转到代码的IsDevelopment部分,并添加以下几行:

if (env.IsDevelopment())
{
    //Time limit extended
    spa.Options.StartupTimeout = new TimeSpan(days: 0, hours: 0, minutes: 1, seconds: 30);
    //Time limit extended
    spa.UseAngularCliServer(npmScript: "start");
}

参考:https://github.com/aspnet/JavaScriptServices/issues/1512

答案 1 :(得分:0)

如果您添加了 SSL 标志,请确保 angular.json 中的 SSL 标志不为真。