.NET 5.0调用API报System.InvalidOperationException无匹配路由错误如何解决
.NET 5.0 POST调用API路由不匹配异常排查方案
核心错误原因
你当前定义的GetLanguages接口显式标记了[HttpGet]特性,仅支持GET类型的请求,使用POST方法调用时无法匹配到对应路由,就会抛出System.InvalidOperationException: No route matches the supplied values异常。
如果要支持POST请求,直接修改接口的请求方法特性即可:
// 替换原有[HttpGet, Route("GetLanguages")]特性 [HttpPost, Route("GetLanguages")] public Languages GetLanguages() { try { return _Languages.GetLanguages(); } catch (Exception) { throw; } }
其他可能的排查点
- 确认请求的URL拼写正确,该接口的正确请求路径为
{服务地址}/api/Common/GetLanguages,注意路由占位符[controller]会自动去掉控制器类名的Controller后缀,所以路径中是Common而非CommonController - 检查Startup.cs的中间件配置顺序是否正确,.NET 5.0需确保路由和端点映射配置顺序无误:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件... app.UseRouting(); // 认证、授权中间件要放在UseRouting之后,UseEndpoints之前 app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
- 检查当前控制器下是否存在相同请求方法、相同路由模板的重复接口,路由冲突也会导致匹配失败
快速验证方案
如果需要临时兼容GET和POST两种请求方式,可以替换为如下特性:
[AcceptVerbs("GET", "POST"), Route("GetLanguages")] public Languages GetLanguages() { // 原有业务逻辑不变 }
内容的提问来源于stack exchange,提问作者Amol Naik
相关产品推荐
相关产品推荐

