Mar*_*cin 4 pipeline routes single-page-application asp.net-core angular
默认情况下,startup.cs 中的 .UseSpa() 捕获到达管道点的每个请求,并尝试将其作为对 SPA 主页的请求进行处理
我想在路由 /api/* 处为我的 API 调用保留 404,以防万一 api url 中出现拼写错误时,我的记录器会记录 404,而不是像“错误代码:200 消息:解析 https 期间 Http 失败: //localhost:5001/api/non-existing-api-should-give-404"(因为它得到了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");
}
});
}
Run Code Online (Sandbox Code Playgroud)
Ren*_*ena 16
中间件UseSpa
是一个包罗万象的东西,任何到达该点的请求都将始终返回默认的 SPA 页面。这意味着对尚未找到控制器的路由的任何请求将始终返回默认 SPA 页面,并且不会抛出 404。
UseSpa()
仅当路由不带前缀时,您才需要执行此操作/api
。这本质上允许任何以该点开头的请求/api
跳过该点。
改变:
app.UseSpa(spa =>
{
//...
});
Run Code Online (Sandbox Code Playgroud)
到:
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder =>
{
builder.UseSpa(spa =>
{
//...
});
});
Run Code Online (Sandbox Code Playgroud)
这将允许任何从该点开始的请求/api
,如果没有其他中间件或路由匹配,404
则将返回 a。
归档时间: |
|
查看次数: |
3467 次 |
最近记录: |