web-dev-qa-db-ja.com

JavaScriptからKeyValuePairまたはIDictionaryのリストをWeb APIコントローラーに渡す

2つのパラメーターをポストしたいWeb APIコントローラーがあります。 1つはフラットなint IDで、もう1つはIDictionaryまたは同等のIDです。

[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: thingsdata: '=' + things)、ディクショナリはAPIコントローラに到達しません。 nullであるか、1つの偽のエントリ({0、0})があります。

私はまた、ウリで辞書を送ろうとしました-行きません。

辞書またはキーと値のペアをAPIコントローラーに送信するにはどうすればよいですか?

13
user1810582

配列は必要ありません-シンプルな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'
});
19
carlosfigueira

これは私のために働きました:

var settings = [];
settings.Push({ key: "setting01", value: "Value01" });
settings.Push({ key: "setting02", value: "Value02" });
3
Cesar Daniel

これは本当に古いですが、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>>。 Web APIはそれを取得できました。これが将来の読者の役に立つことを願っています!

0
cloudstrifebro