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); }
核心问题修复点
- MVC控制器参数绑定:添加
[FromBody]特性,确保MVC能正确解析JSON格式的请求体。 - 数据结构匹配:Web API期望接收包含
Students列表的对象,MVC转发时需将单个Student包装为对应结构。 - 属性命名一致性:Web API的
Students类属性名与JSON文件键名保持一致(首字母大写),避免反序列化失败。 - 前端请求格式:使用
JSON.stringify()将对象转为JSON字符串,配合contentType: 'application/json'确保请求格式正确。 - Web API参数绑定:添加
[FromBody]特性,明确从请求体读取参数。
内容的提问来源于stack exchange,提问作者Tanmay Pawar
相关产品推荐
相关产品推荐

