AngularJS向.NET Controller发送POST请求时参数对象值全为空
AngularJS POST到.NET控制器参数为空问题解决
问题现象
前端AngularJS构造的过滤参数对象Filtro数据正常,但后端.NET控制器接收的FiltroUsuarios对象所有属性值均为空。
核心解决步骤
1. 为控制器参数添加[FromBody]特性
ASP.NET MVC中,POST请求的复杂类型参数需要通过[FromBody]特性指定从请求体绑定数据,否则默认无法正确解析JSON格式的请求内容。
修改后的C#控制器代码:
[HttpPost] public ActionResult GetUsuariosFilter([FromBody] FiltroUsuarios Filtro) { try { var response = _server.GetUsuarios(); if (response == null) throw new Exception("Error."); return Json(response); } catch (Exception e) { return Json(new ResponseRequest() { Success = false, Message = e.Message, MessageDetail = (e.InnerException != null ? e.InnerException.Message : "") }); } }
2. 确保FiltroUsuarios类属性匹配且可访问
后端FiltroUsuarios类的属性名称需与前端Filtro对象的属性完全对应,且必须是public修饰、包含get/set访问器的属性,否则模型绑定无法赋值。
示例FiltroUsuarios类定义:
public class FiltroUsuarios { public string Usuario { get; set; } public string Nombre { get; set; } public string Rfid { get; set; } public int CurrentPage { get; set; } }
3. 前端避免手动序列化JSON(可选但推荐)
AngularJS的$http服务会自动将JavaScript对象序列化为JSON字符串,无需手动调用JSON.stringify,手动序列化可能导致格式解析问题。
修改AngularJS控制器中的GetUsuariosFilter函数:
function GetUsuariosFilter(filtro) { return appService.POST(filtro, "/Usuarios/GetUsuariosFilter"); }
同时调整services.js中的POST方法,空数据时传入空对象而非空字符串:
this.POST = function (data, url) { var deferred = $q.defer(); if (data == null || data == undefined) data = {}; var promise = $http({ method: 'POST', url: url, contentType: "application/json; charset=utf-8", dataType: "json", data: data }).then(function (response) { deferred.resolve(response); }).catch(function (error) { if (error.status == -1) { alert('Se produjo un error al conectar con el servidor'); } deferred.reject(error); }); return deferred.promise; }
验证要点
- 用浏览器开发者工具查看Network标签,确认POST请求的Request Body中包含正确的JSON数据
- 检查后端
FiltroUsuarios类的属性是否与前端参数名称完全对应(大小写不敏感,但建议保持一致避免问题)
内容的提问来源于stack exchange,提问作者Milagros Ramos
相关产品推荐
相关产品推荐

