问题 将字符串POST到ASP.NET 4.5和VS 2012 RC中的Web API控制器


我是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
}

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

谢谢


12496
2017-07-26 03:46


起源



答案:


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

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

10
2017-07-26 10:03



谢谢,通过在[FromBody]前面加上action参数,这对我有用。这是WebAPI的奇怪行为。 - durbhakula
如果值是json对象怎么办? - awe


答案:


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

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

10
2017-07-26 10:03



谢谢,通过在[FromBody]前面加上action参数,这对我有用。这是WebAPI的奇怪行为。 - durbhakula
如果值是json对象怎么办? - awe


请注意为将值发布回服务器而形成的键值对。键应与操作方法参数中的预期相同。在这种情况下,您的密钥是“值”

[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指出了我的错误。在Web API中发布表单数据时,参数名称应为空。

string myParamters = "=durbhakula";

您还需要在action方法中放置[FormBody]属性。该 FromBody attribute告诉Web API从请求正文中读取值

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

请看这个 链接


2
2017-07-26 04:22



这在Web API中不起作用。 aspnetwebstack.codeplex.com/discussions/359687 - Aliostad
@Aliostad:谢谢你指出我的错误 - Anand