使用Swagger测试Web API时HttpPost创建Driver遇路由匹配错误
解决Swagger中HttpPost创建Driver时的路由匹配错误
问题分析
出现swagger error: No route matches the supplied values错误,核心原因有两个:
CreatedAtAction方法中指定的"GetDriver"动作不存在,框架无法找到对应路由生成返回的Location头- 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
相关产品推荐
相关产品推荐

