Я работаю с веб-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 } }
ViewModel
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
он работает.
Может ли кто-нибудь объяснить ПОЧЕМУ?
Каков тип контента, который вы видите в случае запроса '$ .ajax' и в случае' $ .post'? Обратите внимание, что тип содержимого важен для веб-api, поскольку он пытается использовать правильный форматтер на основе этого, чтобы десериализовать содержимое запроса. –
Тип контента - это приложение \ json, я хочу знать, почему он работает для запроса полезной нагрузки, а не для данных формы. –