使用ASP.NET Core路由时出现Localhost 404错误求助
排查ASP.NET Core添加Route特性后404的问题
兄弟,我之前也踩过类似的坑,结合你描述的情况——加[Route]就404、其他机器正常运行、怀疑环境或配置问题,给你几个针对性的排查方向:
1. 先确认路由模板的匹配逻辑
你控制器上的路由是[Route("/api/[controller]")],对应的请求URL应该是/api/Values([controller]会自动替换掉控制器名的后缀,也就是ValuesController→Values)。这里有两个小细节要注意:
- 试试去掉模板开头的斜杠,改成
[Route("api/[controller]")]——ASP.NET Core的路由模板开头的斜杠有时候会干扰路由匹配的优先级,尤其是和全局路由配置叠加的时候。 - 如果你习惯小写URL,确认下项目有没有开启路由小写转换?如果没开,请求
/api/values(全小写)可能会匹配失败(不过默认是不区分大小写的,但保险起见可以测试下全大写的URL)。
2. 检查Startup/Program.cs的路由核心配置
这是最容易出问题的地方:
- 如果是ASP.NET Core 3.0+(用Top-Level Statements的Program.cs),必须确保有
app.MapControllers();——这是启用属性路由的关键,如果漏了,所有带[Route]的控制器都不会被识别。 - 如果是老版本用
UseMvc的项目,要确认配置里加了routes.MapMvcAttributeRoutes();,否则属性路由不会生效,只会走传统的约定路由。 - 排查有没有全局路由前缀:比如如果在
AddControllers()的时候加了全局的路由过滤器(比如[Route("api")]),那你控制器上的/api/[controller]会叠加成/api/api/Values,自然就404了。
3. 排查环境和依赖问题
既然其他机器能正常运行,大概率是你本地环境的问题:
- 对比正常机器的NuGet包版本:尤其是
Microsoft.AspNetCore.Mvc、Microsoft.AspNetCore.App这类核心包,是不是你本地项目不小心升级到了不兼容的版本?可以尝试清理本地NuGet缓存,运行命令:
然后重新还原包。dotnet nuget locals all --clear - 检查
launchSettings.json里的applicationUrl:是不是你请求的URL和配置的端口/协议不一致?比如配置的是https://localhost:5001,但你用http://localhost:5000请求,就会404。
4. 开启路由调试日志定位问题
如果上面的方法都没找到问题,可以开启路由调试日志,看请求到底有没有匹配到你的控制器:
在Program.cs里添加日志过滤:
builder.Logging.AddFilter("Microsoft.AspNetCore.Routing", LogLevel.Debug);
启动应用后,查看控制台或日志文件,里面会详细显示每一个请求的路由匹配过程——比如哪个路由模板被匹配了,为什么没匹配到你的控制器,一目了然。
5. 检查控制器的动作方法
别忘了,控制器的路由只是第一步,动作方法也需要明确的HTTP动词特性(比如[HttpGet]、[HttpPost])或者路由模板:
比如你的动作方法如果是这样的:
public IActionResult Get() { return Ok(_valuesService.GetValues()); }
那必须加上[HttpGet]或者[Route("")],否则即使控制器路由匹配了,也找不到对应的动作方法,还是会返回404。
内容的提问来源于stack exchange,提问作者Vash
相关产品推荐
相关产品推荐

