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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:18:42