You need to enable JavaScript to run this app. ASP.NET Core Web API中MasterController多端点匹配异常如何解决
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API中MasterController多端点匹配异常如何解决

问题原因

你的控制器中定义了3个未配置专属路由的[HttpGet]接口,控制器全局路由规则为[Route("[controller]")],所有接口都匹配/Master路径,ASP.NET Core路由系统无法区分请求要调用哪个接口,因此抛出AmbiguousMatchException异常。

解决方案

有两种常用的修复方案,按需选择即可:

方案1:为每个接口单独配置子路由

直接在HttpGet特性中指定当前接口的子路由标识,自定义程度高:

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using VENUS.HRMS.API.Filters;
using VENUS.HRMS.DATA.Data;
using VENUS.HRMS.DATA.Models;

namespace VENUS.HRMS.API.Controllers
{
    [ApiController]
    [Route("[controller]")]
    // 纯API控制器建议继承ControllerBase,移除无关的View返回逻辑
    public class MasterController : ControllerBase
    {
        [HttpGet("EmpRole")]
        [AuthorizationFilter]
        public IEnumerable<TblMstEmpRole> Get()
        {
            var emprole = new EmpRoleData().GetMstEmpRole();
            return emprole;
        }

        [HttpGet("State")]
        [AuthorizationFilter]
        public IEnumerable<TblMstState> GetState()
        {
          var state = new StateData().GetMstState();
            return state;
        }

        [HttpGet("City")]
        [AuthorizationFilter]
        public IEnumerable<TblMstCity> GetCity()
        {
            var city = new CityData().GetMstCity();
            return city;
        }
    }
}

修改后三个接口的访问路径分别为:

  • /Master/EmpRole
  • /Master/State
  • /Master/City

方案2:全局配置路由携带Action名称

修改控制器级别的路由规则,自动将Action名称拼接为路由的一部分,不需要单独给每个接口配路由:

[ApiController]
// 新增[action]占位符,路由规则变为 控制器名/方法名
[Route("[controller]/[action]")]
public class MasterController : ControllerBase
{
    [HttpGet]
    [AuthorizationFilter]
    public IEnumerable<TblMstEmpRole> Get()
    {
        var emprole = new EmpRoleData().GetMstEmpRole();
        return emprole;
    }

    [HttpGet]
    [AuthorizationFilter]
    public IEnumerable<TblMstState> GetState()
    {
      var state = new StateData().GetMstState();
        return state;
    }

    [HttpGet]
    [AuthorizationFilter]
    public IEnumerable<TblMstCity> GetCity()
    {
        var city = new CityData().GetMstCity();
        return city;
    }
}

修改后三个接口的访问路径分别为:

  • /Master/Get
  • /Master/GetState
  • /Master/GetCity

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:45:02