You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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请求体绑定到多个独立参数,需定义匹配的实体类并配置绑定:

  1. 创建实体类:
public class UserModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}
  1. 修改控制器方法,添加[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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:10:19