11

私は WebAPI が初めてで、それを学ぼうとしています。単体テストから WebClient を使用して文字列を POST しようとしている WebAPI コントローラーがあります。

以下のコードを使用して、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 値を取得します。値を取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

10

受け取る必要があるのが1つの値だけの場合は=、値の前に使用します。

var result = client.UploadString(_webapiUrl, "POST", "=hello"); // NOTE '='
于 2012-07-26T10:03:38.787 に答える
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);
}

アップデート

私の間違いを指摘してくれたAliostadに感謝します。Web APIでフォームデータを送信するときは、パラメータ名を空にする必要があります。

string myParamters = "=durbhakula";

また、アクションメソッドに[FormBody]属性を含める必要があります。FromBody属性は、リクエスト本文から値を読み取るようにWebAPIに指示します

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

このリンクをご覧ください

于 2012-07-26T04:22:04.473 に答える