使用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
相关产品推荐
相关产品推荐

