Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Передать массив чисел через POST / 21 сообщений из 21, страница 1 из 1
27.10.2020, 13:11
    #40012163
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
Добрый день! Подскажите, пожалуйста, как передать методом 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
27.10.2020, 13:31
    #40012175
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
У тебя JSON такой:
Код: javascript
1.
{0: 1, 1: 2}


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


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


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

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


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



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

надо
...
Рейтинг: 0 / 0
27.10.2020, 13:50
    #40012190
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
Научись пользоваться отладчиком браузера, смотри, что передается на сервер
...
Рейтинг: 0 / 0
27.10.2020, 13:59
    #40012192
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
Что-то все равно не хочет:
...
Рейтинг: 0 / 0
27.10.2020, 14:09
    #40012197
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
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
27.10.2020, 14:24
    #40012205
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
fkthat
Заинтриговало, а в чем трюк-то? Чем отличается от просто "body: idList"? Отстал я, похоже, от мира frontend.
ну я тоже так навскидку написал, просто если не указать имя свойства, то как биндер разберется, какому параметру его назначить?

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

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

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





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

Это я для скриншота уже успел только один элемент оставить...
...
Рейтинг: 0 / 0
27.10.2020, 14:36
    #40012214
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
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
27.10.2020, 14:45
    #40012220
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
Shocker.Pro
Посмотрел по fetch - в примерах для body используется JSON.stringify

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

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

Ну вот же, я писал уже - твой json гумно. Тебе нужно чтобы в нем был голый массив без всяких объектов и idList. Посмотри выше я скриншот со свагера постил.
...
Рейтинг: 0 / 0
27.10.2020, 15:10
    #40012237
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
Вот если так:
Код: 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
27.10.2020, 15:14
    #40012239
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
ну так сравни, чем отличаются передаваемые в запросе body
в виде текста
...
Рейтинг: 0 / 0
27.10.2020, 15:23
    #40012245
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать массив чисел через POST
Qwe.Qwe1
Почему "JSON.stringify(idList)" дает иной результат и не работает в итоге? Тот же массив же.

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


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