11

我是 WebAPI 的新手并试图学习它。我有一个 WebAPI 控制器,我正在尝试使用我的单元测试中的 WebClient 向其发布一个字符串。

我正在使用下面的代码向我的 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
}

我可以在我的控制器上打一个断点,但它似乎没有发布任何字符串,我总是得到 NULL 值。我应该怎么做才能获得价值?

谢谢

4

2 回答 2

10

如果您只需要接收一个值,=请在值之前使用:

var result = client.UploadString(_webapiUrl, "POST", "=hello"); // NOTE '='
于 2012-07-26T10:03:38.787 回答
2

请注意为将值发送回服务器而形成的键值对。Key 应该与您在操作方法参数中所期望的相同。在这种情况下,您的密钥是“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属性告诉 Web API 从请求正文中读取

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

请看这个链接

于 2012-07-26T04:22:04.473 回答