在 Angular 应用程序中对 /index.html 进行 POST 调用时出现 500 内部服务器错误

Posted

技术标签:

【中文标题】在 Angular 应用程序中对 /index.html 进行 POST 调用时出现 500 内部服务器错误【英文标题】:500 Internal Server Error on POST call to /index.html in Angular application 【发布时间】:2021-08-09 22:18:37 【问题描述】:

我正在开发一个 Angular 应用程序。我正面临这个问题,我需要一些帮助来解决它。

当我对 http:///index.html 执行 GET 操作时,它工作正常。 当我对 http:///index.html 执行 POST 操作时,它返回 500 Internal Server Error,响应正文或标头中没有内容。

我在app.module.ts 中查看了RouterModule.forRoot,但找不到单独过滤掉POST 呼叫的任何选项。

这是我正在运行的一个 Asp.Net Core MVC 应用程序。

我是角度新手。我不确定要走哪条路。任何帮助将不胜感激。

谢谢。

【问题讨论】:

你为什么要把POST转成/index.html 好吧,坦率地说,这不是我。它是一个自动投票系统发布到我的应用程序。这降低了我的应用程序的可靠性得分。因此,试图摆脱这一点。 你能展示你的观点和两个动作 - 获取和发布吗? 尝试在Post方法中设置断点,并检查该方法是否被执行,并逐步检查是否有错误或异常。通常,在 Angular 应用程序中,我们使用Event binding 来处理 post 操作。此外,正如 Serge 所说,最好将相关代码共享以重现问题,然后我们可以共同解决。 【参考方案1】:

我最近遇到了同样的问题,根据我的调查,代码的行为因环境而异(开发与生产) 在开发中,如果你对 /index.html 进行 POST,你会得到 404,在生产中你会得到 500。我还提出了一个 GitHub 问题:https://github.com/dotnet/aspnetcore/issues/34420

我的临时解决方案是添加一个中间件并捕获来自 UseSpa 中间件的异常

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    ......
    app.Use(async (context, next) =>
    
        //Redirect to root request to /index.html ( except the GET request ) 
        //Do not generate logs for requests originating from automated tools: POST /Index.html, OPTIONS /index.html, DEBUG /index.htm, etc.. 
        if (!HttpMethods.IsGet(context.Request?.Method)
            && context.Request?.Path.Value.ToLower() == "/index.html")
        
            context.Response.Redirect("/");
            return;
        

        try
        
            await next();
        
        catch (InvalidOperationException spaException)
        
            if (spaException.Message.StartsWith("The SPA default page middleware could not return the default page"))
            
                context.Response.StatusCode = StatusCodes.Status404NotFound;
                return;
            
            throw;
        
    );

    app.UseSpa(...);
    .....

【讨论】:

以上是关于在 Angular 应用程序中对 /index.html 进行 POST 调用时出现 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

在Angular2中对对象数组进行排序

在 Angular 中对 requestAnimationFrame 进行单元测试的选项都有哪些?

Angular2 中对 SystemJS 的需求是啥?

在 Angular 2+ 中对 FormArray 对象进行排序的理想方法是啥?

如何在 Angular 7 中对包含特殊字符的查询参数进行编码?

如何在 Angularfire2 Angular2 中对 FirebaseListObservable 列表进行排序?