同一解决方案下两个.NET Core项目触发请求匹配多端点异常
问题根因
这个异常和两个项目的监听端口没有任何关系,属于单进程内部的ASP.NET Core路由注册冲突,核心原因是你启动的监听localhost:7000的API进程中,同时加载了API和example.API两个项目的程序集。
ASP.NET Core默认会扫描进程内所有已加载的程序集,把所有符合要求的Controller(继承ControllerBase、标记了[ApiController]等特性)的接口路由全部注册到当前进程的路由表中,哪怕两个Controller来自不同的程序集,只要路由规则重合,就会抛出你遇到的AmbiguousMatchException歧义匹配异常。
卸载example.API项目后问题仍然存在的原因
通常是以下两种情况导致:
- 你没有清理API项目的历史编译输出,
API项目的bin输出目录中仍然残留着之前编译生成的example.API.dll文件,进程启动时会默认加载同目录下的所有dll文件,导致example.API的Controller仍然被扫描注册 - 你之前在
API项目中添加过对example.API项目的引用,卸载项目时没有删除API项目.csproj文件中的项目引用配置,编译时仍然会自动将example.API.dll复制到输出目录
修改单项目路由后恢复正常的原因
修改其中一个项目的路由后,两个接口的路由规则不再重合,自然不会触发歧义匹配的校验逻辑,但这属于治标不治本的方案,本质上你的API进程中还是加载了多余的example.API程序集,只是没有触发路由冲突而已。
解决方案
- 彻底删除两个项目根目录下的
bin、obj编译缓存目录 - 打开
API项目的.csproj配置文件,检查并删除所有对example.API的项目引用或dll引用配置 - 启动项目前,确认没有残留的旧dotnet运行进程占用端口
内容的提问来源于stack exchange,提问作者danny barlev
相关产品推荐
相关产品推荐

