我一直在使用Web API,发现了一个有趣的观察,我无法理解。为什么ModelBinding不能与FormData一起使用,但可以与RequestPayload一起使用?
控制器:
public class UserController: ApiController { public void Post(MyViewModel data) { //data is null here if pass in FormData but available if its sent through Request Payload } }
视图模型
public class MyViewModel{ public long SenderId { get; set; } public string MessageText { get; set; } public long[] Receivers { get; set; } }
JS不工作
var usr = {}; usr.SenderId = "10"; usr.MessageText = "test message"; usr.Receivers = new Array(); usr.Receivers.push("4"); usr.Receivers.push("5"); usr.Receivers.push("6"); $.ajax( { url: '/api/User', type: 'POST', data: JSON.stringify(usr), success: function(response) { debugger; }, error: function(error) {debugger;} });
JS是工作
var usr = {}; usr.SenderId = "10"; usr.MessageText = "test message"; usr.Receivers = new Array(); usr.Receivers.push("4"); usr.Receivers.push("5"); usr.Receivers.push("6"); $.post("/api/User", usr) .done(function(data) { debugger; });
因此,如果我传递$.ajax
与其他很多配置如type
,contentType
,accept
等,它仍然没有正确绑定模型,但在$.post
的情况下它的工作原理。
任何人都可以解释为什么?
什么是基于请求,并在'$ .post'的情况下,你看到在'$ .ajax'情况下,内容类型?请注意,内容类型对web api非常重要,因为它尝试使用基于此的正确格式化程序来反序列化请求内容。 –
内容类型是application \ json,我想知道它为什么适用于请求负载而不适用于表单数据。 –