#asp.net-web-api2
#asp.net-web-api2
Вопрос:
Я ненавижу спрашивать, потому что есть много вопросов, связанных с этой проблемой, но я не получил ни одного, чтобы отправлять какие-либо данные в ASP.NET Метод Web API 2. Все это поступает и отправляется на один и тот же хост и порт.
Вот мой код на стороне сервера:
[RoutePrefix("api/help")]
public class HelpAPIController : ApiController
...
public class Item {
public string name { get; set; }
public string position { get; set; }
}
[Route]
[HttpPost]
public void Post([FromBody] Item[] stuff)
; // we get here but data is always null or zero items in array
}
Javascript:
"use strict";
var a = [{ "name": "me", "position": "here" },
{ "name": "me", "position": "here" },
{ "name": "me", "position": "here" }];
jQuery.ajax({
type: "POST",
datatype: "application/json",
url: "/api/help/",
data: { "stuff": JSON.stringify(a) },
success: function (data) { alert(data); },
error: function (error) {
...
}
});
Фактическое содержимое запроса (без жестких возвратов):
stuff:[{"name":"me","position":"here"},
{"name":"me","position":"here"},
{"name":"me","position":"here"}]
Комментарии:
1. Работает ли он с a
List<Item>
вместоItem[]
?2. @PetreTurcu Нет, и он даже не работает с одним объектом без массива (когда и сервер, и клиент не указывают массив.) Он имеет нулевые элементы или пустой.
Ответ №1:
-
Вы не передаете тип контента на сервер.
datatype
какой тип ответа вы ожидаете от сервера.contentType
это то, что вы отправляете. По умолчаниюcontentType
в jQueryapplication/x-www-form-urlencoded; charset=UTF-8
. Вам нужно добавить / отредактировать:dataType: "json", contentType: "application/json",
-
Вам не нужно оборачивать массив данных объектом. Это будет сделано:
data: JSON.stringify(a),
Комментарии:
1. Да. Необходимы как ContentType, так и изменение JSON.stringify(a).
Ответ №2:
Попробуйте добавить contentType: "application/json"
в свой Ajax POST.
У вас есть тип данных, который, я думаю, является тем, что вы ожидаете от сервера, тогда как ContentType — это то, что вы отправляете.
Комментарии:
1. Определенно исправлено в ContentType, но также пришлось изменить часть stringify. Тип содержимого был на 90% частью решения. Хотелось бы отметить два правильных ответа.