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

调用CreatedAtAction返回"No route matches the supplied values"错误如何解决?

问题根因
  • 单元测试通过的原因是你直接实例化控制器调用方法,未触发ASP.NET Core路由解析、Action查找逻辑,仅校验了返回值类型,不会验证路由是否真实存在。
  • 核心错误点是你定义的FindById方法为private访问修饰符,ASP.NET Core 路由系统只会将public修饰的控制器方法识别为可路由的Action,private方法不会被注册到全局路由表中。因此当CreatedAtAction尝试生成响应的Location头时,找不到匹配的FindById路由,就抛出了No route matches the supplied values异常。
  • 你之前尝试的SuppressAsyncSuffixInActionNames配置是用于处理Action名带Async后缀时路由系统自动裁剪后缀的场景,和当前问题无关,因此不生效。
修复方案

将FindById方法的访问修饰符从private修改为public即可:

[HttpGet("{id}", Name ="FindById")]
public async Task<ActionResult<LicenseType>> FindById(Guid id )
{
    var licenseType = await _context.LicenseTypes.FirstOrDefaultAsync(e => e.LicenseTypeId == id);
    if (licenseType == null)
    {
        return NotFound();
    }
    return licenseType;
}

可选优化

如果你不希望将FindById接口暴露给外部调用,可以改用CreatedAtRoute方法生成返回值,不需要依赖Action名称,直接使用你在HttpGet特性中声明的路由Name即可:

// AddAsync方法中修改返回语句
return CreatedAtRoute("FindById", new { id = newLicenseType.LicenseTypeId }, newLicenseType);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:01