C# 如何在错误的API url上返回404?(ASP.NET核心和SPA)

C# 如何在错误的API url上返回404?(ASP.NET核心和SPA),c#,angular,asp.net-core-2.1,C#,Angular,Asp.net Core 2.1,我需要在错误的api调用中返回404,这样我就可以在客户端为用户创建正确的响应(Angular 5)。当前后端返回状态代码200和index.html,这导致前端出现json解析错误 我用ASP.NETCore2.1和AngularTemplate项目创建了新的web项目。以下是该模板的发布版本。我根本没有更改模板代码,我只是在azure上发布了它。(在开发模式下,我得到404错误,正如预期的那样) 如前所述,默认行为应为404 是Startup.cs,和SampleDataController

我需要在错误的api调用中返回404,这样我就可以在客户端为用户创建正确的响应(Angular 5)。当前后端返回状态代码200和index.html,这导致前端出现json解析错误

我用ASP.NETCore2.1和AngularTemplate项目创建了新的web项目。以下是该模板的发布版本。我根本没有更改模板代码,我只是在azure上发布了它。(在开发模式下,我得到404错误,正如预期的那样)

如前所述,默认行为应为404

Startup.cs
,和
SampleDataController.cs

我想在
Startup.cs
中使用类似的东西:

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action}/{id?}");
        });

        app.MapWhen(x => x.Request.Path.Value.Contains("/api"), builder =>
        {
            builder.UseMvc(routes =>
            {
                routes.MapSpaFallbackRoute(
                    name: "spa-fallback",
                    defaults: new { controller = "Home", action = "Error" });
            });
        });
HomeController.cs
中:

    public IActionResult Error()
    {
        return NotFound();
    }

但这似乎是错误的,尽管它是有效的

注意:根据您的链接,我假设您使用的是
app.UseSpa()
中间件

路由中间件按顺序执行,如果请求从未找到控制器,则返回
404
状态。
UseSpa
middlware是一个包罗万象的工具,任何到达该点的请求都将始终返回默认的SPA页面。这意味着对尚未找到控制器的路由的任何请求都将始终返回默认SPA页面,而不会抛出404

如果路由没有前缀
/api
,则只需调用
UseSpa()
。这实际上允许以
/api
开头的任何请求跳过该点

而不是:

app.UseSpa(spa=>
{
//[剪报]
});
使用:

app.MapWhen(x=>!x.Request.Path.Value.StartsWith(“/api”),builder=>
{
builder.UseSpa(spa=>
{
//[剪报]
});
});

这将允许以
/api
开头的任何请求通过该点,如果没有其他中间件或路由匹配,则将返回
404

有没有发现这个问题?没有,我仍在使用所述的“解决方案”。