.NET 6应用API路由404状态码返回问题求助
解决方案:为未匹配的API请求返回404状态码
这个方案完全可行,核心是利用ASP.NET Core端点匹配按注册顺序执行的特性,在API控制器之后、Blazor回退路由之前,添加一个专门拦截未匹配/api/前缀请求的端点,直接返回404。
关键调整:端点注册顺序
你当前的代码把MapFallbackToPage放在了MapControllers前面,这会导致所有未匹配的请求(包括API请求)先被Blazor的回退路由捕获,返回200。正确的注册顺序应该是:
- 先注册Razor Pages
- 再注册API控制器
- 添加自定义的API 404拦截端点
- 最后注册Blazor的回退路由
修改后的完整配置代码
... app.MapRazorPages(); app.MapControllers(); // 拦截所有未被API控制器匹配的/api开头请求,返回404 app.Map("/api/{**catchAll}", context => { context.Response.StatusCode = StatusCodes.Status404NotFound; return Task.CompletedTask; }); app.MapFallbackToPage("/_Host"); ...
原理说明
MapControllers()会先匹配所有已定义的API路由,匹配成功则正常处理;- 未匹配的
/api/前缀请求会被/api/{**catchAll}路由捕获,直接设置404状态码返回; - 非
/api/前缀的未匹配请求才会落到Blazor的MapFallbackToPage,继续由Blazor处理(展示自定义404页面)。
这样既解决了API请求返回错误状态码的问题,又不影响Blazor Web UI的正常功能。
内容的提问来源于stack exchange,提问作者Валентин Никин
相关产品推荐
相关产品推荐

