ASP.NET MVC中AJAX Post请求控制器接收参数为NULL问题
问题描述
我编写了一个JavaScript函数,希望将数据传递至ASP.NET MVC控制器,但所有参数传递后均为NULL。浏览器网络请求显示已发送JSON数据,尝试用实体类接收仍无效。
JavaScript代码:
$.ajax({ type: "POST", url: "/Home/CreateUser", contentType: "application/json", dataType: "json", data: JSON.stringify({name: 'Dylan', email: 'an@email.com', password: 'password'}), success: function (response) { window.location.href = 'dashboard'; }, error: function (error) { alert('Error while signing up: ' + error); } })
控制器代码:
[HttpPost] public ActionResult CreateUser(string name, string email, string password) { Console.WriteLine("Data received successfully: Name - " + name + ", Email - " + email + ", Password - " + password); return Content("Data received successfully: Name - " + name + ", Email - " + email + ", Password - " + password); }
解决方案
方法一:使用实体类接收(推荐)
ASP.NET MVC默认不会直接将JSON请求体绑定到多个独立参数,需定义匹配的实体类并配置绑定:
- 创建实体类:
public class UserModel { public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } }
- 修改控制器方法,添加
[FromBody]特性指定从请求体解析数据:
[HttpPost] public ActionResult CreateUser([FromBody] UserModel user) { if (user != null) { Console.WriteLine($"Data received successfully: Name - {user.Name}, Email - {user.Email}, Password - {user.Password}"); return Content($"Data received successfully: Name - {user.Name}, Email - {user.Email}, Password - {user.Password}"); } return BadRequest("Invalid user data"); }
注意:实体类属性名必须和JSON中的键名完全匹配(默认大小写敏感),
[FromBody]是核心,缺少它框架会尝试从URL参数或表单数据中取值,而非JSON请求体。
方法二:直接绑定到独立参数(不推荐)
若不想用实体类,调整JavaScript代码,传递表单格式数据而非JSON:
$.ajax({ type: "POST", url: "/Home/CreateUser", contentType: "application/x-www-form-urlencoded", // 切换为表单格式 dataType: "json", data: {name: 'Dylan', email: 'an@email.com', password: 'password'}, // 无需JSON.stringify success: function (response) { window.location.href = 'dashboard'; }, error: function (error) { alert('Error while signing up: ' + error); } })
此时原控制器方法无需修改即可正常接收参数。
实体类接收无效的常见排查点
如果之前尝试实体类接收失败,大概率是以下原因:
- 实体类属性名与JSON键名不匹配(比如JSON是
name,实体类定义为UserName) - 未添加
[FromBody]特性 - 实体类没有无参构造函数(ASP.NET MVC需要无参构造函数实例化对象)
- JSON数据格式错误(比如缺少引号、逗号,或键名拼写错误)
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

