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

使用jQuery和AJAX向MVC 5 API控制器POST JSON/表单数据,值始终为null

解决Web API控制器接收POST数据为null的问题

从你的代码来看,导致VisitAddModel始终为null的原因主要有几个,我来一步步帮你解决:

1. 模型属性的访问修饰符错误

你的VisitAddModel类里的属性没有添加public修饰符,C#中类成员默认是私有(private)的,而Web API的模型绑定器无法访问私有属性,所以无法将请求数据映射到模型上。

修改模型类,把所有属性改为public:

public class VisitController : ApiController { 
    public class VisitAddModel { 
        public string VisitId { get; set; } 
        public DateTimeOffset VisitDate { get; set; } 
        public string NoteText { get; set; } 
        public string DoctorNote { get; set; } 
    } 

    [HttpPost] 
    public bool Index([FromBody]VisitAddModel model) { 
        return true; 
    } 
}

2. AJAX请求的内容类型与数据格式问题

jQuery的AJAX默认会把数据编码为application/x-www-form-urlencoded格式,但Web API的[FromBody]特性默认期望接收application/json格式的数据。另外,你需要把JavaScript对象序列化为JSON字符串再发送。

修改你的AJAX代码:

var newRec = { 
    VisitId: 'xxxxxxxxxxxxxxxxxxxx', 
    // 将日期转换为ISO格式,确保Web API能正确解析为DateTimeOffset
    VisitDate: new Date('3/27/2018').toISOString(), 
    NoteText: 'Test note text...' 
};

$.ajax({
    url: '/api/Visit/Index', // 确保URL和你的Web API路由匹配,通常Web API路由会带/api前缀
    type: 'POST',
    contentType: 'application/json; charset=utf-8', // 指定请求内容为JSON
    data: JSON.stringify(newRec), // 序列化对象为JSON字符串
    success: function(response) {
        console.log('请求成功:', response);
    },
    error: function(xhr, status, err) {
        console.error('请求失败:', err);
    }
});

额外检查点

  • 确认你的Web API路由配置正确,比如是否启用了默认路由(通常在WebApiConfig.cs中设置config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }))
  • 如果你的VisitDate解析还是有问题,可以尝试直接传入ISO格式的字符串,比如'2018-03-27T00:00:00.000Z'

这样修改后,你的控制器应该就能正确接收到POST过来的模型数据了。

内容的提问来源于stack exchange,提问作者Matt Spinks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:33:55