.NET 6 Web API读取x-www-form-urlencoded数据为空,求排查
ASP.NET WebAPI (.NET 6) 读取x-www-form-urlencoded请求体为空的排查方案
你的代码逻辑本身没有问题,出现属性绑定为空的情况,大概率是请求发送环节或路由配置的问题,以下是具体排查方向和解决方法:
1. 修正请求体的参数分隔符
你的请求示例中出现了&(HTML转义后的&),这是错误的格式。ASP.NET解析x-www-form-urlencoded格式时,必须使用原始的&作为参数分隔符。如果请求体中写的是empId=xxx&firstName=fName&lastName=lName,框架会将其解析为不完整的键值对,导致无法匹配TestObj的属性。
正确的请求体内容应为:
empId=xxx&firstName=fName&lastName=lName
2. 确认控制器路由前缀匹配
你的请求路径是/MyController/v1/Test,需确保控制器类上配置了对应的路由前缀,示例如下:
[ApiController] [Route("MyController/v1")] // 必须添加该前缀才能匹配请求路径 public class MyController : ControllerBase { // 你的Test方法代码 }
如果未配置该前缀,实际可访问路径应为/Test,不过你的请求返回了200,说明路由已匹配,可快速验证此配置。
3. 规范请求发送方式(以Postman为例)
避免在Raw标签下手动编写表单内容,直接切换到x-www-form-urlencoded标签,手动添加empId、firstName、lastName三个键值对。Postman会自动处理正确的编码和分隔符,避免手动编写带来的格式错误。
4. 清除请求体中的多余字符
你的请求头中Content-Length: 40,但正确的参数内容长度仅为31,说明请求体中可能包含换行、空格等不可见字符,这些字符会干扰ASP.NET的表单解析。请删除请求体中的多余换行或空格,确保内容紧凑。
按上述调整后重新发送请求,即可正常绑定TestObj的属性。
内容的提问来源于stack exchange,提问作者Izle
相关产品推荐
相关产品推荐

