You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6应用API路由404状态码返回问题求助

解决方案:为未匹配的API请求返回404状态码

这个方案完全可行,核心是利用ASP.NET Core端点匹配按注册顺序执行的特性,在API控制器之后、Blazor回退路由之前,添加一个专门拦截未匹配/api/前缀请求的端点,直接返回404。

关键调整:端点注册顺序

你当前的代码把MapFallbackToPage放在了MapControllers前面,这会导致所有未匹配的请求(包括API请求)先被Blazor的回退路由捕获,返回200。正确的注册顺序应该是:

  1. 先注册Razor Pages
  2. 再注册API控制器
  3. 添加自定义的API 404拦截端点
  4. 最后注册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,提问作者Валентин Никин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:52:07