powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Передать массив чисел через POST
21 сообщений из 21, страница 1 из 1
Передать массив чисел через POST
    #40012163
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Подскажите, пожалуйста, как передать методом POST через боди массив чисел? Пробую так, но в контроллере входной параметр = null.

Вызов метода контроллера:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
let idList: number[] = [];
idList.push(1);
idList.push(2);

let parameters = {
  method: 'POST',
  headers: {            
    'Content-Type': 'application/json'           
  },
   body: { ...idList } // or JSON.stringify(idList)
};

let response = await fetch("<url>", parameters).then();        
var result = await response.json();



Контроллер:
Код: c#
1.
2.
3.
4.
[HttpPost("MyMethod")]
public IActionResult GetData([FromBody] List<int> idList) {
  // idList is null
}
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012175
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя JSON такой:
Код: javascript
1.
{0: 1, 1: 2}


а тебе нужен вот такой:
Код: javascript
1.
[1, 2]


Поэтому замени
Код: javascript
1.
body: { ...idList }


на просто
Код: javascript
1.
body: idList
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012177
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1
Код: javascript
1.
...idList

а нафига ты "..." воткнул. Он тебе и развернет массив в объект и не будет никакого массива
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012183
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал
Код: javascript
1.
body: idList


но все равно в контроллере null.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012189
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1
Пробовал
Код: javascript
1.
body: idList



но все равно в контроллере null.
потому что
Код: c#
1.
body: { idList }

надо
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012190
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Научись пользоваться отладчиком браузера, смотри, что передается на сервер
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012192
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то все равно не хочет:
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012197
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
потому что
Код: c#
1.
body: { idList }

надо

Заинтриговало, а в чем трюк-то? Чем отличается от просто "body: idList"? Отстал я, похоже, от мира frontend.

Хотя я понял. Но как раз при {idList} json будет неподходящий. Нужен голый массив, а не объект. Объект подошел бы если бы метод акции принимал

Код: c#
1.
2.
3.
4.
public class Model 
{
    public int[] IdList {get;set;}
}
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012205
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Заинтриговало, а в чем трюк-то? Чем отличается от просто "body: idList"? Отстал я, похоже, от мира frontend.
ну я тоже так навскидку написал, просто если не указать имя свойства, то как биндер разберется, какому параметру его назначить?

А так - да, модель лучше заводить. Настолько давно не работал без моделей, что уже и не соображу, как на параметр правильно забиндить ))
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012208
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1
Что-то все равно не хочет:

Что-то странно, почему у тебя один элемент в массиве?
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012210
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: c#
1.
2.
[HttpPost("/foo")]
public bool Foo([FromBody] List<int> model) => model is not null;





Так что тут дело в чем-то другом.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012212
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел по fetch - в примерах для body используется JSON.stringify
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012213
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
Что-то странно, почему у тебя один элемент в массиве?

Это я для скриншота уже успел только один элемент оставить...
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012214
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
ну я тоже так навскидку написал, просто если не указать имя свойства, то как биндер разберется, какому параметру его назначить?

[FromBody] может быть только один. Если пришел скаляр, то просто мепится на скалярный тип данных (целиком), если объект, то поля json мепятся на свойства класса, если массив, то на коллекцию.

Т.е. если у тебя:
Код: c#
1.
2.
3.
4.
5.
6.
7.
publlic class Model 
{
    public string Name {get; set;}
}

[HttpPost()]
public void Foo([FromBody] model) {}


То нужен json
Код: javascript
1.
{ "name": "Joe Doe" }


а вовсе не
Код: javascript
1.
2.
3.
{
   "model": { "name": "Joe Doe" }
}
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012220
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Посмотрел по fetch - в примерах для body используется JSON.stringify

Я тоже на это внимание обратил.

Автор, шли дамп HTTP которого у тебя JS отправляет. Без этого мы тут просто гадаем на картах таро и жабьих костях.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012227
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1
Что-то все равно не хочет:

Ну вот же, я писал уже - твой json гумно. Тебе нужно чтобы в нем был голый массив без всяких объектов и idList. Посмотри выше я скриншот со свагера постил.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012237
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот если так:
Код: javascript
1.
body: JSON.stringify([1, 2, 3])


или так
Код: javascript
1.
body: JSON.stringify([1])


то работает с таким контроллером:
Код: c#
1.
2.
[HttpPost()]
public IActionResult Get([FromBody] int[] model)



Почему "JSON.stringify(idList)" дает иной результат и не работает в итоге? Тот же массив же.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012239
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так сравни, чем отличаются передаваемые в запросе body
в виде текста
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012245
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1
Почему "JSON.stringify(idList)" дает иной результат и не работает в итоге? Тот же массив же.

Я в душе не знаю, т.к. никогда fetch не пользовался. Но в RTFM написано везде "stringify" значит надо так и делать.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012248
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Все изыскания выше причесали где нужно код и оно заработало.
...
Рейтинг: 0 / 0
Передать массив чисел через POST
    #40012266
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты забыл добавить слово "рандомные"
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Передать массив чисел через POST
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]