ASP.NET Web API路由匹配失败及请求异常问题排查
ASP.NET Web API ConcertController 请求问题排查与解决
问题描述
- 前端向
https://localhost:44490/api/Concert/GetPartyConcerts发送请求时,报错router.ts:11 No routes matched location "/api/Concert/GetPartyConcerts" - 使用Postman向
http://localhost:44490/api/Concert/GetPartyConcerts发送请求时,返回socket hang up错误 - 对应的ConcertController代码:
[ApiController] public class ConcertController : ControllerBase { private readonly IPartyConcertRepository _partyConcertRepository; public ConcertController(IPartyConcertRepository partyConcertRepository) { _partyConcertRepository = partyConcertRepository; } [HttpGet("GetPartyConcerts")] [ProducesResponseType(200, Type = typeof(IEnumerable<Party>))] public IActionResult GetPartyConcerts() { var partyConcerts = _partyConcertRepository.GetParties(); if (!ModelState.IsValid) return BadRequest(ModelState); return Ok(partyConcerts); } }
排查与解决步骤
1. 修正控制器路由配置
当前ConcertController缺少全局路由前缀,[ApiController]结合属性路由时需明确控制器的路由基准。在控制器类上添加[Route("api/[controller]")],确保路由与请求地址匹配:
[ApiController] [Route("api/[controller]")] // 添加路由前缀 public class ConcertController : ControllerBase { // 原有代码保持不变 }
添加后,GetPartyConcerts方法的完整路由为api/Concert/GetPartyConcerts,与请求地址完全对应。
2. 确认协议与端口匹配
- 前端使用HTTPS协议请求
44490端口,但Postman用了HTTP协议,需核对项目端口配置:
打开项目的Properties/launchSettings.json,查看applicationUrl字段,示例配置如下:
Postman请求需使用对应协议的端口,若HTTPS端口为"applicationUrl": "https://localhost:44490;http://localhost:5001"44490,请求地址应为https://localhost:44490/api/Concert/GetPartyConcerts。
3. 检查Repository实现
socket hang up一般是请求超时导致,需排查IPartyConcertRepository.GetParties()方法:
- 确认是否存在数据库连接超时、死循环、长时间阻塞操作
- 检查是否有未捕获的异常导致请求无法正常返回
4. 前端请求路由问题排查
前端报错No routes matched location,可能是前端框架(如React Router、Vue Router)将API请求识别为前端路由:
- 确认前端请求是否正确指向后端API地址,而非前端路由路径
- 若使用代理,检查代理配置是否将
/api开头的请求转发到后端服务器
内容的提问来源于stack exchange,提问作者koogel
相关产品推荐
相关产品推荐

