Передача списка KeyValuePair или IDictionary в Web Api Controller из Javascript
У меня есть контроллер веб-api, которому я бы хотел опубликовать два параметра. Один из них - это плоский int ID, а другой - IDictionary или аналогичный эквивалент.
[HttpPost]
public void DoStuff(int id, [FromBody]IDictionary<int, int> things)
{
}
var things = new Array();
things.push({ 1: 10 }); // tried things.push({ Key: 1, Value: 10 })
things.push({ 2: 11 });
$.ajax({
url: '/api/DoStuff?id=' + id,
data: '=' + JSON.stringify(things), // tried what seems like 100 different things here
type: 'POST',
dataType: 'json'
});
Независимо от того, что я пытаюсь использовать в параметре данных (data: things
, data: '=' + things
), словарь не доходит до контроллера api. Он либо имеет значение null, либо имеет одну фиктивную запись ({0, 0}).
Я также попытался отправить словарь в Uri - нет.
Как я могу отправить пару слов словаря или ключа в контроллер api?
Ответы
Ответ 1
Вам не нужен массив - вам нужен простой объект JS (который отображается в словаре). Этот код должен работать:
var things = {};
things['1'] = 10;
things['2'] = 11;
$.ajax({
url: '/api/DoStuff?id=' + id,
data: JSON.stringify(things),
contentType: 'application/json'
type: 'POST',
dataType: 'json'
});
Ответ 2
Это работало для меня:
var settings = [];
settings.push({ key: "setting01", value: "Value01" });
settings.push({ key: "setting02", value: "Value02" });
Ответ 3
Это действительно старый, но в JS я создал объект вроде @cesardaniel:
var dictionary = [];
dictionary.push({ key: 1, value: [1,2,3,4,5] });
dictionary.push({ key: 2, value: [6,7,8,9,0] });
но моя форма объекта в .net имела тип Dictionary<KeyValuePair<int, IEnumerable<int>>
. Затем веб-ави смог поднять его. Надеюсь, это поможет будущему читателю!
Ответ 4
Словарь похож на массив пар ключ-значение. вы должны отправить
var data = {}
data['things[0].Key'] = x
data['things[0].Value'] = y
// etc
EDIT:
ваш js должен выглядеть примерно так.
var data = { };
data['things[0].Key'] = 1;
data['things[0].Value'] = 1;
data['things[1].Key'] = 22;
data['things[1].Value'] = 12;
$.ajax({
url: /api/DoStuff?id=' + id,
data: data,
type: 'POST',
dataType: 'json'
});
и что-то вроде этого
public ActionResult DoStuff(int id, Dictionary<int, int> things)
{
// ...
}