使用jQuery向ASP.NET Web API发送POST请求时参数接收异常问题
解决方案:jQuery POST请求无法绑定Web API复杂类型参数
我之前也碰到过完全一样的问题!这种情况核心原因是jQuery默认发送的请求格式和ASP.NET Web API对复杂类型参数的绑定规则不匹配,下面是具体的解决步骤:
1. 给控制器参数添加[FromBody]属性
首先修改你的API控制器方法,明确告诉Web API从请求体中读取参数:
[HttpPost] [Route("notepad/")] public Notepad AddNote([FromBody] Notepad note) // 这里添加[FromBody] { note.AddedDate = DateTime.Now; _Context.Add(note); _Context.SaveChanges(); return note; }
这个属性是关键,它会让Web API忽略URL中的参数,专门从请求体里解析复杂类型对象。
2. 修改jQuery请求,发送JSON格式数据
jQuery的$.post方法默认会把JS对象转成application/x-www-form-urlencoded格式(也就是Title=xxx&Message=xxx这种键值对),但Web API的复杂类型默认期望接收application/json格式的请求体。你需要改用$.ajax并手动指定格式:
// 构造要发送的笔记数据 var noteData = { Title: "测试标题", Message: "测试内容" }; $.ajax({ url: "/notepad/", type: "POST", contentType: "application/json; charset=utf-8", // 必须指定JSON内容类型 data: JSON.stringify(noteData), // 将JS对象序列化为JSON字符串 success: function(response) { console.log("笔记添加成功:", response); }, error: function(xhr) { console.error("请求失败:", xhr.responseText); } });
3. 检查Notepad类的属性访问权限
最后确认你的Notepad实体类属性是public且带有get/set访问器,否则Web API无法完成属性绑定:
public class Notepad { public int Id { get; set; } public string Title { get; set; } // 必须是public且有setter public string Message { get; set; } public DateTime AddedDate { get; set; } }
为什么之前Postman能成功?
因为Postman默认发送的是JSON格式请求,并且会自动设置Content-Type: application/json,刚好匹配Web API的参数绑定规则,而jQuery的默认行为不符合这个要求,所以才会出现字段为null的情况。
内容的提问来源于stack exchange,提问作者The Moon
相关产品推荐
相关产品推荐

