JQuery Ajax POST请求至MVC控制器失效,返回Null问题求助
解决Ajax POST到MVC控制器返回Null的问题
我之前也踩过这个坑!你遇到的控制器接收数据为Null的问题,大概率是请求格式不匹配或者序列化方式不对导致的,即使加了[FromBody]也需要配合正确的Ajax配置才行。下面一步步给你解决:
1. 修正Ajax请求的核心配置
你的Ajax代码缺少两个关键设置:指定contentType为JSON,以及把数据序列化为JSON字符串。修改后的代码如下:
$('#SignIn').click(function () { $('#SignIn').val('Please Wait'); Ajax_Login(); }); function Ajax_Login() { var data = { username: $('#Email').val().trim(), password: $('#Password').val() }; $.ajax({ url: '/YourControllerName/Login', // 替换成你实际的控制器+方法路由 type: 'POST', contentType: 'application/json; charset=utf-8', // 必须:告诉服务器请求体是JSON格式 data: JSON.stringify(data), // 必须:把JS对象转为JSON字符串 success: function(result) { console.log('登录请求结果:', result); $('#SignIn').val('Sign In'); // 这里处理成功后的逻辑,比如跳转页面 }, error: function(xhr, status, error) { console.error('请求出错:', error); $('#SignIn').val('Sign In'); // 提示用户登录失败 } }); }
为什么要这么改?因为[FromBody]特性要求请求体是原始JSON字符串,而jQuery Ajax默认会把JS对象转成application/x-www-form-urlencoded格式的键值对,服务器根本无法解析成你的Data对象,所以返回Null。
2. 后端代码的注意事项
确保Data类属性与前端键匹配
你的Data类属性名要和前端JSON的键一致(注意大小写!),或者配置反序列化忽略大小写:
// 后端Data类示例 public class Data { // 如果前端传的是"username",这里可以用Username,然后配置忽略大小写 public string Username { get; set; } public string Password { get; set; } } // 控制器方法 [HttpPost] // 必须加这个,确保只接受POST请求 public IActionResult Login([FromBody] Data data) { if (data == null) { return BadRequest("请求数据格式不正确"); } // 这里写你的登录逻辑 return Ok("登录成功"); }
配置JSON反序列化忽略大小写(可选但实用)
如果前端用驼峰式(比如username),后端用帕斯卡式(比如Username),可以在Program.cs(ASP.NET Core 6+)中配置让JSON反序列化忽略大小写:
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; });
3. 排查工具:浏览器开发者工具
如果还是不行,打开浏览器F12,切换到Network标签,找到你的POST请求,检查这两个点:
- Request Payload:看是不是正确的JSON格式(比如
{"username":"xxx@xxx.com","password":"xxxx"}) - Response:看服务器返回的状态码和错误信息,比如404是URL错了,400是请求格式不对
按照上面的步骤改,基本就能解决控制器接收数据为Null的问题了!
内容的提问来源于stack exchange,提问作者Ehi
相关产品推荐
相关产品推荐

