J'ai un contrôleur d'api Web sur lequel je voudrais poster deux paramètres. L'un est un ID plat et l'autre est un IDictionary ou un équivalent similaire.
[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'
});
Peu importe ce que j'essaie dans le paramètre data (data: things
, data: '=' + things
), le dictionnaire ne parvient pas au contrôleur api. Il est nul ou comporte une entrée fictive ({0, 0}).
J'ai également essayé d'envoyer le dictionnaire dans l'Uri - non, allez-y.
Comment puis-je envoyer le dictionnaire ou la paire de valeurs de clé au contrôleur d'api?
Vous n'avez pas besoin d'un tableau, vous avez besoin d'un simple objet JS (qui correspond à un dictionnaire). Ce code devrait fonctionner:
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'
});
Celui-ci a fonctionné pour moi:
var settings = [];
settings.Push({ key: "setting01", value: "Value01" });
settings.Push({ key: "setting02", value: "Value02" });
C'est vraiment vieux, mais dans JS j'ai créé un objet comme @cesardaniel:
var dictionary = [];
dictionary.Push({ key: 1, value: [1,2,3,4,5] });
dictionary.Push({ key: 2, value: [6,7,8,9,0] });
mais ma forme d'objet dans .net était de type Dictionary<KeyValuePair<int, IEnumerable<int>>
. L'API Web a ensuite été en mesure de le détecter. J'espère que cela aidera un futur lecteur!