ASP.NET Core WebAPI遇404错误,求缺失配置排查建议
排查ASP.NET Core API 404 Not Found错误的常见原因
我来帮你梳理下可能导致这个404错误的几个关键排查点,你可以逐一核对:
确认请求URL和HTTP方法是否匹配路由规则
你的UserController用了[Route("api/[controller]")]属性,所以基础路由是/api/User,再加上[HttpPost]特性,正确的请求应该是POST方法访问/api/User。你需要检查Fiddler里的请求:- 是不是把URL写成了
/api/Users(多了个s)或者/api/user?虽然路由默认不区分大小写,但拼写错误还是要优先排除; - 有没有错误地在URL里加上了action名称,比如
/api/User/RegisterUser?因为你的RegisterUser方法没有单独指定路由,所以不需要额外添加action路径。
- 是不是把URL写成了
检查Startup/Program.cs里的路由配置是否完整
ASP.NET Core需要正确配置控制器路由才能找到你的控制器:- 如果是.NET 6+的Program.cs,要确保添加了
app.MapControllers();(这个是映射属性路由控制器的关键配置,不能漏掉); - 如果是老版本的Startup.cs,在
ConfigureServices里要调用services.AddControllers();,然后在Configure方法里依次添加app.UseRouting();和app.UseEndpoints(endpoints => { endpoints.MapControllers(); });,这些中间件的顺序不能错,也不能省略。
- 如果是.NET 6+的Program.cs,要确保添加了
验证请求的Content-Type和参数绑定
你的方法接收User对象作为参数,POST请求需要正确传递数据:- 如果是JSON格式的请求体,必须在请求头里设置
Content-Type: application/json,而且要在参数上加上[FromBody]特性,也就是改成public string RegisterUser([FromBody] User newUser)。如果没加[FromBody],ASP.NET Core会尝试从URL或表单绑定数据,找不到的话可能会导致模型绑定失败,甚至间接引发路由匹配问题; - 确认Fiddler里的请求体确实包含了符合
User类结构的有效数据。
- 如果是JSON格式的请求体,必须在请求头里设置
检查控制器和方法的访问修饰符
虽然你的代码里控制器是public的,但要确保RegisterUser方法也是public的(你的代码里看起来是对的,但如果不小心改成private或internal,API就无法访问这个方法)。确认请求的端口和协议是否正确
检查Fiddler里的请求是不是发到了项目实际启动的端口和协议上,比如项目启动的是HTTPS的localhost:5001,结果你请求的是HTTP的localhost:5000,这种情况也会返回404。
内容的提问来源于stack exchange,提问作者user9401912
相关产品推荐
相关产品推荐

