Angular POST请求传值后端Controller接收为null问题求助
解决后端参数
listaTeste始终为null的问题 嘿,我来帮你排查下这个问题!后端的listaTeste一直为null,主要是这几个关键地方出错了,咱们一个个来修正:
1. JSONP 不支持 POST 请求
你前端代码里写了dataType: "jsonp",但JSONP的本质是通过动态生成<script>标签发起GET请求,完全不支持POST方法。而你后端标记了[HttpPost],这直接导致请求方式不匹配,后端根本接不到正确的参数。
把dataType: "jsonp"删掉,改用标准的JSON请求:
vm.MostrarDiv = function() { $http({ method: 'POST', url: _obterUrlAPI() + "ImportacaoPreFatura/ValidarLayoutTeste", data: { listaTeste: vm.carregarLayoutTeste } // 这里换成data,不再用params }).then(function successCallback(response) { vm.preFatura = response.data; }, function errorCallback(response) { MessageBox("Erro", response.data.Message); }); };
2. 参数传递方式错误
你原来用params来传参数,这会把数据拼接到URL的查询字符串里,但对于List<ValidaLayout>这种复杂集合类型,后端很难通过URL查询字符串正确绑定到对象上。应该用data属性把参数放在请求体里,这样ASP.NET才能正确解析。
3. 告诉后端从请求体读取参数
在后端方法的参数上加上[FromBody]特性,明确告诉框架要从请求体里获取这个列表参数:
[HttpPost] [Route("ValidarLayoutTeste")] public IHttpActionResult ValidarLayoutTeste([FromBody] List<ValidaLayout> listaTeste) { // 你的业务逻辑代码 }
最后再检查两个细节
- 确保前端
vm.carregarLayoutTeste的结构和后端ValidaLayout类的属性完全匹配(比如属性名一致,ASP.NET默认会处理JS的小驼峰和C#的大驼峰映射,但最好尽量对齐)。 - 确认请求的
Content-Type是application/json,$http默认会自动设置这个,但如果有全局请求拦截器修改了配置,一定要检查一下。
按照上面的步骤改完,应该就能解决参数为null的问题啦!
内容的提问来源于stack exchange,提问作者Vinicius Cano
相关产品推荐
相关产品推荐

