我一直在使用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,我想知道它爲什麼適用於請求負載而不適用於表單數據。 –