如何使用 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");
}
});
我在 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");
}
});