Blazor WASM .NET 6 RC1 无效/api路由返回HTML而非404问题求助
解决方案
首先确认你的Program.cs(.NET 6顶级语句模式)的中间件注册顺序必须符合规则:先注册控制器路由相关中间件,再注册Blazor的回退规则,顺序错误是大部分同类配置不生效的核心原因。
有两种可靠的配置方式可选,推荐优先用第一种,逻辑更清晰不易出错:
方式1:用条件判断排除/api前缀请求(推荐)
直接通过MapWhen对请求路径做前缀判断,仅非/api前缀的请求才走Blazor回退逻辑:
var builder = WebApplication.CreateBuilder(args); // 注册服务 builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); // 静态文件中间件优先注册 app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 先映射控制器、Razor页面路由 app.MapControllers(); app.MapRazorPages(); // 核心配置:排除所有/api前缀的请求,剩余请求回退到index.html app.MapWhen(ctx => !ctx.Request.Path.StartsWithSegments("/api"), appBuilder => { appBuilder.MapFallbackToFile("index.html"); }); app.Run();
方式2:修正路由约束写法
如果你坚持用正则路由约束的方案,需要修正正则的锚定逻辑,同时保证控制器路由注册在回退规则之前:
app.MapControllers(); app.MapRazorPages(); // 正则锚定路径开头,排除所有/api开头的请求 endpoints.MapFallbackToFile("{**slug:regex(^(?!/api/).*$):nonfile}", "index.html");
配置完成后可直接验证效果:
- 访问不存在的前端路由(如
/test/xxx):正常返回index.html走Blazor前端路由逻辑 - 访问不存在的Api路径(如
/api/无效控制器/xxx):正常返回404状态码,不会返回HTML内容
内容的提问来源于stack exchange,提问作者NSS
相关产品推荐
相关产品推荐

