2013-03-18 3 views
1

Я пытаюсь создать метод WebAPI действий со следующей подписью:WebAPI связать тело словаря Json

[System.Web.Http.HttpPost] 
public object Execute([FromUri] string command, [FromUri] string method, [FromBody] IDictionary<string, JToken> arguments) 

Однако, когда я ударил этот метод с запросами, аргументы никогда не связывает правильно (два поля URI делать). ModelState показывает ошибку разбора Json.NET при первом символе. Я пробовал запросы органов, которые выглядят так: id=50 и arguments={ "id": 50 }. Как мне сформулировать мой запрос, чтобы WebApi правильно привязывал мои параметры?

+1

Словари состоят из keyValuePairs, таким образом, в json world - массив объектов, каждый из которых имеет свойство Key и Value, поэтому IDictionary привязывает requries json что-то вроде 'arguments = [{Key:" id ", Value: 50}, {Key: "другой", стоимость: 100}] '. Может быть немного, если вы сериализовали словарь как объект JSON, вы бы поняли, что я имею в виду. – AaronLS

ответ

2

Вам не нужны «id =» или «arguments =» в теле запроса. Вы должны просто отправить что-то похожее на это:

{"key1": 4, "key2": 50, "key3": {"member1": "value"}} 

и имейте это работать. Словарь затем будет содержать key1: JValue со значением 4, key2: JValue со значением 50, key3: JObject с членом member1 со значением «value».

+0

Библиотеки AJAX, такие как JQuery и YUI поддерживают отправку данных в этом формате? – ChaseMedallion

+1

Это стандартный JSON -> конечно jQuery. – svobol13

Смежные вопросы