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

ASP.NET Core API路由匹配异常:filter-data触发400验证错误

请求错误匹配到Get(Int32)导致400 Bad Request的原因分析

核心问题是ASP.NET Core的路由匹配逻辑导致请求被错误分配到Get(Int32)方法,进而触发参数类型转换失败的400错误,具体原因分以下几种场景:

  • 路由模板无参数约束:如果Get(Int32)方法的路由是[HttpGet("{id}")](未添加int约束),框架会将请求路径中的filter-data当作id参数的字符串值,尝试转换为Int32类型,转换失败后返回400错误,提示id字段值无效。
  • 路由定义顺序问题:若Get(Int32)方法的路由定义在FilterData方法之前,ASP.NET Core路由系统会优先匹配先定义的路由规则,导致/PlantPollution/filter-data请求被先匹配到Get(Int32)方法,而非目标的FilterData接口。
  • 控制器级别路由冲突:如果控制器上标注了包含参数占位符的路由(比如[Route("[controller]/{id?}")]),请求/PlantPollution/filter-data会被解析为id=filter-data,自动匹配到接受Int32类型id的Get方法,触发类型不匹配的验证错误。

验证思路:

  1. 检查Get(Int32)的路由特性,确认是否添加了int约束(正确写法应为[HttpGet("{id:int}")])
  2. 调整FilterData方法的路由定义顺序,确保它在Get(Int32)方法之前
  3. 检查控制器级别路由是否存在可能导致冲突的参数占位符,必要时修改控制器路由或为接口添加更明确的路由前缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:08:13