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

.NET 6.0 AmbiguousMatchException 相同Action重复匹配问题咨询

异常产生的核心原因

该异常是同一个Create接口被ASP.NET Core路由系统注册了两次完全相同的端点导致的,你遇到的两个匹配项完全一致的场景,最高概率触发原因是程序集重复扫描,其他常见场景如下:

  • 程序集重复扫描:在Startup.ConfigureServices的AddControllers/AddMvc配置中,重复将FleetLogix.Intranet程序集添加到了ApplicationParts中,导致同一个Controller被扫描两次,所有Action都会被注册两遍端点。
  • 混合路由规则冲突:你同时使用了约定路由(即Startup中配置的MapAreaControllerRoute)和属性路由(即Controller/Action上加的[Route]特性),两种路由规则均匹配到了同一个Create方法,导致生成了两个一致的端点。
  • Controller方法重复注册:UnitsController中存在两个Create方法重载,且均未标记[HttpGet]/[HttpPost]等请求方法特性,或者标记了完全相同的请求方法与路由模板,路由系统无法通过参数签名自动区分两个重载。
  • 重复的Controller定义:项目中存在两个命名空间、类名完全一致的UnitsController(比如旧文件未删除、partial类错误添加了[Controller]特性),路由系统会将两个类下的同名Create方法识别为两个相同的端点。

排查步骤

  1. 检查UnitsController的Create方法定义,确认是否存在多个重载、是否添加了重复的路由特性、是否明确标记了请求方法。
  2. 检查UnitsController是否添加了[Area("ReportGroups")]特性,确认是否同时在Action上添加了与约定路由冲突的属性路由模板。
  3. 查看Startup.ConfigureServices中控制器注册逻辑,确认是否重复添加了同一程序集到ApplicationParts,类似错误写法如下:
services.AddControllers()
    .AddApplicationPart(typeof(UnitsController).Assembly)
    .AddApplicationPart(typeof(UnitsController).Assembly); // 重复添加同一程序集
  1. 可添加临时调试代码输出所有匹配的端点元数据,快速定位两个端点的差异:
// 在Startup.Configure方法的最末尾添加
var endpointDataSource = app.Services.GetRequiredService<EndpointDataSource>();
foreach (var endpoint in endpointDataSource.Endpoints)
{
    if (endpoint.DisplayName?.Contains("UnitsController.Create") == true)
    {
        // 打印endpoint的路由模板、元数据信息即可区分两个端点的生成来源
        Console.WriteLine(endpoint);
    }
}

内容的提问来源于stack exchange,提问作者Hecatonchires

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:02