如何使用 ASP.Net Core 3,SPA 应用程序 return 无效 api 请求的错误

How to return an error on an invalid api request, using ASP.Net Core 3, SPA app

我在 ASP.Net Core 3 中使用 SPA (React) 应用程序。

发生的事情是任何请求都将首先转到后端并允许 .Net 尝试路由它,如果找不到路由,它 returns index.html 并假定 SPA可以处理路由。

大多数时候我对此很满意,但我想知道是否有一种方法可以排除 api/ 中的任何路由器。

我发现很烦人的是 index.html 在任何虚构的 api/MadeUp/Request 上返回(带有 200)。 我不能让它在无效 api 请求时返回 500,但仍然允许 SPA 管理任何其他请求(即返回 index.html)吗?

如果请求 uri 以 /api[=14 开头,您可以在 UseEndpoint()UseSpa() 和 return 之间添加一个 404(或 500,如果您愿意) =]

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action=Index}/{id?}");
});

app.Use((context, next) =>
{
    if(context.Request.Path.StartsWithSegments(new PathString("api")))
    {
        context.Response.StatusCode = StatusCodes.Status404NotFound;
        return Task.CompletedTask;
    }

    return next();
});

app.UseSpa(spa =>
{
    spa.Options.SourcePath = "ClientApp";

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