Передача массива JSON в веб-API MVC через GET
Я знаю, что есть тонны ответов для этой темы, но не удалось найти решение моей проблемы.
У меня есть ASP.NET MVC Web API, который выглядит следующим образом:
[HttpGet]
public IList<Country> GetCountryList(List<long> idList)
И я пробовал называть его вот так:
$.ajax({
dataType: "json",
data: JSON.stringify({idList: listOfIds}),
type: "GET",
url: "api/v1/util/CountryList",
success: function (result) {
alert(result);
}
});
Затем URL-адрес выглядит следующим образом:
https://localhost/supertext/api/v1/util/CountryList?{%22idList%22:[46,14,62,83,120]}
Альтернатива:
$.ajax({
dataType: "json",
data: {
idList: JSON.stringify(listOfIds),
}
type: "GET",
url: "api/v1/util/CountryList",
success: function (result) {
alert(result);
}
});
URL:
https://localhost/supertext/api/v1/util/CountryList?idList=%5B46%2C14%2C62%2C83%2C120%5D
Оба метода не работают.
Нужно ли мне отправлять и получать его в виде строки или использовать POST?
Ответы
Ответ 1
Нет, не пытайтесь отправлять JSON в GET-запрос. Используйте JSON с другими глаголами, которые имеют тело, например POST и PUT.
Сделайте это стандартным способом, украсив свой параметр действия атрибутом [FromUri]
:
public IList<Country> GetCountryList([FromUri] List<long> idList)
{
...
}
а затем просто вызовите запрос AJAX:
$.ajax({
url: 'api/v1/util/CountryList',
type: 'GET',
data: { idList: [1, 2, 3] },
traditional: true,
success: function (result) {
console.log(JSON.stringify(result));
}
});
Дальнейшее рекомендуемое чтение для вас о том, как работает привязка модели в веб-интерфейсе:
http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1