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

使用Swagger测试Web API时HttpPost创建Driver遇路由匹配错误

解决Swagger中HttpPost创建Driver时的路由匹配错误

问题分析

出现swagger error: No route matches the supplied values错误,核心原因有两个:

  1. CreatedAtAction方法中指定的"GetDriver"动作不存在,框架无法找到对应路由生成返回的Location头
  2. Driver对象的Id属性默认是Guid.Empty,即便存在GetDriver方法,空Guid也会导致路由匹配失败

修复步骤

1. 补充GetDriver动作方法

在DriverController中添加根据Id查询Driver的Get方法,确保CreatedAtAction能找到对应路由:

[HttpGet("{id}")]
public IActionResult GetDriver(Guid id)
{
    var driver = drivers.FirstOrDefault(d => d.Id == id);
    if (driver == null)
    {
        return NotFound();
    }
    return Ok(driver);
}

2. 生成有效的Guid作为Driver的Id

在AddDriver方法中为新Driver生成唯一Guid,避免使用默认空Guid:

[HttpPost]
public IActionResult AddDriver([FromBody] Driver driver)
{
    driver.Id = Guid.NewGuid(); // 生成新的唯一Id
    drivers.Add(driver);
    return CreatedAtAction(nameof(GetDriver), new { id = driver.Id }, driver);
}

注意:显式添加[FromBody]特性,确保请求体正确绑定到Driver参数,避免潜在绑定问题。

3. 验证路由配置

确认控制器的[Route("[controller]")]配置正确,此时GetDriver的路由为/Driver/{id},与CreatedAtAction生成的路由一致。

测试验证

修改完成后重启API,在Swagger中发送Post请求:

  • 请求体无需传入Id(后台会自动生成)
  • 成功创建后,响应的Location头会指向新Driver的Get接口,不会再出现路由匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:52:16