2013-05-15 5 views
2

У меня есть контроллер API с именем MyFIlesController.Вызов метода POST из контроллера API

В нем, у меня есть этот метод:

// POST api/myfiles 
public void Post([FromBody]string value) 
{ 
} 

И вот как я называю его Скрипач:

POST 
URL: `http://localhost:58075/api/myfiles` 

------------------------- 

Request Header: 

User-Agent: Fiddler 

Host: localhost:58075 

Content-Type: application/json 

Content-length: 18 

------------- 

Request body: 
{"value": "asjkfsf"} 

метод вызывается, но значение равно нулю. Что я делаю не так?

+0

показываете ли вы Скрипач протоколирования запроса, что ваш код сделал или запрос, который вы построили в Fiddler? – J0e3gan

+0

Добавьте атрибут [HttpPost] к этому методу – graumanoz

+1

@ J0e3gan Запрос, который я построил в Fiddler. –

ответ

5

Создать класс, который соответствует вашему JSON:

public class Test 
{ 
    public string value{get; set;} 
    public int ID {get; set;} 
} 

И затем измените Api-действие:

// POST api/myfiles 
public void Post([FromBody]Test value) 
{ 

} 

Если вы не хотите, чтобы сделать это, просто изменить POST-тело:

"somevalue" 

EDIT: Добавлен ID для POST-полезной нагрузки. Теперь ваш JSON должен выглядеть следующим образом:

{"value": "someval", 
"ID": 1} 
+0

И что, если метод имеет два входных параметра? ([FromBody] string value, int id) –

+0

Вы хотите идентификатор внутри JSON или как часть Url? – Kenneth

+0

Я хочу, чтобы идентификатор находился в Тело запроса. –

1

Согласно документу MVC http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1, Который точно показывает тот же случай, как ваш покорный

Перейти к Отправка простых типов часть.

При отправке простое значение, вам нужно

  1. Использование FromBody Атрибут

  2. клиенту необходимо отправить значение в следующем формате:

    = значение

    В частности, название por пара пар имя/значение должно быть пустым для простого типа.

В любом случае, для дальнейшего улучшения вам лучше использовать сложный тип (объект) для принятия параметра.

1

Вы должны изменить от:

Request body: 
{"value": "asjkfsf"} 

To:

Request body: 
"asjkfsf" 

Он будет работать для простого типа с форматом JSON

+0

И что, если метод имеет два входных параметра? ([FromBody] string value, int id) –

+0

@petko_stankoski: если вы используете id для простого запроса, поместите его в querystring '? Id = ...'. Для большего, вам действительно нужна модель –

+0

Как я могу использовать? Id = для метода POST? –

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