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

ASP.NET MVC调用Web API POST接口写入JSON失败,接口接收值为Null

问题:ASP.NET MVC通过Web API POST写入JSON文件时参数为Null的问题

在实现ASP.NET MVC应用通过Web API的POST操作将数据写入JSON文件时,Web API的POST方法接收的参数始终为Null,无法完成数据添加。相关代码及修复方案如下:

JSON文件内容

{
    "Students": [
        {
            "id": 1,
            "name": "Ravi",
            "department": "IT"
        },
        {
            "id": 2,
            "name": "Raj",
            "department": "hr"
        },
        {
            "id": 3,
            "name": "avi",
            "department": "it"
        }
    ]
}

ASP.NET MVC模型类

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
}

public class Root
{
    public List<Student> Students { get; set; }
}

MVC控制器代码(接收jQuery请求并转发到API)

public class StudentController : Controller
{
    HttpClientHandler _clientHandler = new HttpClientHandler();

    [HttpPost]
    public async Task<List<Student>> AddUser([FromBody] Student _Students)
    {
        List<Student> OStudents = new List<Student>();

        using (var httpclient = new HttpClient(_clientHandler))
        {
            // 将单个Student包装为Web API期望的Students结构
            var studentWrapper = new { Students = new List<Student> { _Students } };
            StringContent content = new StringContent(JsonConvert.SerializeObject(studentWrapper), Encoding.UTF8, "application/json");

            using (var response = await httpclient.PostAsync("https://localhost:7018/api/Students/AddUser", content))
            {
                string res = await response.Content.ReadAsStringAsync();
                OStudents = JsonConvert.DeserializeObject<List<Student>>(res);
            }
        }

        return OStudents;
    }
}

jQuery前端请求代码

function AddStudent() {
    var oStudent = {
        id: $("#st-Id").val(),
        name: $("#st-Name").val(),
        department: $("#st-Department").val()
    };

    $.ajax({
        url: "/Student/AddUser",
        type: 'POST',
        data: JSON.stringify(oStudent),
        contentType: 'application/json',
        dataType: 'json',
        success: function (msg) {
            alert("学生添加成功");
        },
        error: function(xhr, status, error) {
            console.error("请求失败: ", error);
        }
    });
}

Web API模型类

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
}
   
public class Students
{
    // 与JSON文件的键名保持一致
    public List<Student> Students { get; set; }
}   

Web API控制器代码(写入JSON文件)

[HttpPost("AddUser")]
public IActionResult AddUser([FromBody] Students _Student)
{
    var filePath = @"C:/Users/tanmay_pawar/source/repos/CRUDAPI/CRUDAPI/output.json";
    var json = System.IO.File.ReadAllText(filePath);

    Students students = JsonConvert.DeserializeObject<Students>(json);

    students.Students.AddRange(_Student.Students);

    json = JsonConvert.SerializeObject(students, Formatting.Indented);
    System.IO.File.WriteAllText(filePath, json);

    return Ok(students.Students);
}

核心问题修复点

  1. MVC控制器参数绑定:添加[FromBody]特性,确保MVC能正确解析JSON格式的请求体。
  2. 数据结构匹配:Web API期望接收包含Students列表的对象,MVC转发时需将单个Student包装为对应结构。
  3. 属性命名一致性:Web API的Students类属性名与JSON文件键名保持一致(首字母大写),避免反序列化失败。
  4. 前端请求格式:使用JSON.stringify()将对象转为JSON字符串,配合contentType: 'application/json'确保请求格式正确。
  5. Web API参数绑定:添加[FromBody]特性,明确从请求体读取参数。

内容的提问来源于stack exchange,提问作者Tanmay Pawar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:00:54