Ответ 1
Если вам нужно получить только одно значение, используйте =
перед значением:
var result = client.UploadString(_webapiUrl, "POST", "=hello"); // NOTE '='
Я новичок в 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. Что делать, чтобы получить значение?
Спасибо
Если вам нужно получить только одно значение, используйте =
перед значением:
var result = client.UploadString(_webapiUrl, "POST", "=hello"); // NOTE '='
Обратите внимание на пару значений ключа, которая формируется для отправки значений обратно на сервер. Ключ должен быть таким же, как вы ожидаете в параметре метода действия. В этом случае ваш ключ "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)
{
..
..
}
См. ссылку