使用 Spa() returns index.html 来自 API 而不是 404
UseSpa() returns index.html from API instead of 404
默认情况下 startup.cs 中的 .UseSpa() 捕获到达其管道点的每个请求,并尝试将其作为对 SPA 主页的请求进行处理
我想在路由 /api/* 为我的 API 呼叫保留 404,以防万一 api url 中的错字成为我的记录器会记录 404 而不是像“错误代码:200 消息:解析 https://localhost:5001/api/non-existing-api-should-give-404 期间的 Http 失败”(因为它得到 index.html 响应)
我已经在这上面花了一天多的时间,但我找不到解决方案:( UseSpa() 似乎覆盖了任何不匹配的端点。有什么解决办法吗?
这是来自 Startup.cs 的基本配置,问题出在生产环境中。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
if (!env.IsDevelopment())
{
app.UseSpaStaticFiles();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSpa(spa =>
{
if (env.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://127.0.0.1:4200");
}
});
}
UseSpa
中间件是包罗万象的,任何达到这一点的请求都将始终具有默认的 SPA 页面 returned。这意味着对尚未找到控制器的路由的任何请求将始终 return 默认 SPA 页面,并且不会抛出 404。
如果路由没有前缀 /api
,您将只调用 UseSpa()
。这实质上允许任何以 /api
开头的请求跳过该点。
变化:
app.UseSpa(spa =>
{
//...
});
收件人:
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder =>
{
builder.UseSpa(spa =>
{
//...
});
});
这将使任何以 /api
开头的请求超过该点,如果没有其他中间件或路由匹配,404
将被 returned。
默认情况下 startup.cs 中的 .UseSpa() 捕获到达其管道点的每个请求,并尝试将其作为对 SPA 主页的请求进行处理
我想在路由 /api/* 为我的 API 呼叫保留 404,以防万一 api url 中的错字成为我的记录器会记录 404 而不是像“错误代码:200 消息:解析 https://localhost:5001/api/non-existing-api-should-give-404 期间的 Http 失败”(因为它得到 index.html 响应)
我已经在这上面花了一天多的时间,但我找不到解决方案:( UseSpa() 似乎覆盖了任何不匹配的端点。有什么解决办法吗?
这是来自 Startup.cs 的基本配置,问题出在生产环境中。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
if (!env.IsDevelopment())
{
app.UseSpaStaticFiles();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSpa(spa =>
{
if (env.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://127.0.0.1:4200");
}
});
}
UseSpa
中间件是包罗万象的,任何达到这一点的请求都将始终具有默认的 SPA 页面 returned。这意味着对尚未找到控制器的路由的任何请求将始终 return 默认 SPA 页面,并且不会抛出 404。
如果路由没有前缀 /api
,您将只调用 UseSpa()
。这实质上允许任何以 /api
开头的请求跳过该点。
变化:
app.UseSpa(spa =>
{
//...
});
收件人:
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder =>
{
builder.UseSpa(spa =>
{
//...
});
});
这将使任何以 /api
开头的请求超过该点,如果没有其他中间件或路由匹配,404
将被 returned。