Отправьте строку в контроллер веб-API в ASP.NET 4.5 и VS 2012 RC

Я новичок в WebAPI и пытаюсь его изучить. У меня есть контроллер WebAPI, к которому я пытаюсь выполнить POST строку с помощью WebClient из моего Unit Test.

Я отправляю строку в свой WebAPI, используя следующий код ниже.

using (var client = new WebClient())
{
   client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
   var result = client.UploadString(_webapiUrl, "POST", "hello");
}

Вот мой контроллер.

[HttpPost]
public byte[] Post(string value)
{
   // Do something with value
}

Я могу ударить точку останова на моем контроллере, но это не похоже на POST любую строку, и я всегда получаю значение NULL. Что делать, чтобы получить значение?

Спасибо

Ответ 1

Если вам нужно получить только одно значение, используйте = перед значением:

var result = client.UploadString(_webapiUrl, "POST", "=hello"); // NOTE '='

Ответ 2

Обратите внимание на пару значений ключа, которая формируется для отправки значений обратно на сервер. Ключ должен быть таким же, как вы ожидаете в параметре метода действия. В этом случае ваш ключ "VALUE"

[HttpPost]
public byte[] Post(string value)

Используйте следующий код, чтобы опубликовать значение.

string URI = "http://www.someurl.com/controller/action";
string myParamters = "value=durbhakula";

using (WebClient wc = new WebClient())
{
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    string HtmlResult = wc.UploadString(URI, myParameters);
}

UPDATE

Я благодарю Aliostad за указание на мою ошибку. Имя параметра должно быть пустым при отправке данных формы в веб-API.

string myParamters = "=durbhakula";

Также вам нужно поместить атрибут [FormBody] в ваш метод действий. Атрибут FromBody сообщает Web API читать значение из тела запроса

[HttpPost]
[ActionName("Simple")]
public HttpResponseMessage PostSimple([FromBody] string value)
{
..
..
}

См. ссылку