C# 如何在错误的API url上返回404?(ASP.NET核心和SPA)
我需要在错误的api调用中返回404,这样我就可以在客户端为用户创建正确的响应(Angular 5)。当前后端返回状态代码200和index.html,这导致前端出现json解析错误 我用ASP.NETCore2.1和AngularTemplate项目创建了新的web项目。以下是该模板的发布版本。我根本没有更改模板代码,我只是在azure上发布了它。(在开发模式下,我得到404错误,正如预期的那样) 如前所述,默认行为应为404 是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
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
。有没有发现这个问题?没有,我仍在使用所述的“解决方案”。