创建默认 ASP.NET Web Api项目时,默认ValuesController具有如下的post方法:
// POST api/values
public void Post(string value)
{
}
我试图用HTTP请求从Filder测试这个POST方法:
POST /api/values
User-Agent: Fiddler
Host: localhost
Content-Type: application/x-www-form-urlencoded
value=abc
这让我感到惊讶,输入参数值为空,而不是 abc。它肯定在测试版中有效,但在 RC 版本中,我做错了什么还是不再像这样工作了?
当然,我们还有另一种解决方法,可以在下面创建强类型对象:
public Class TestDto
{
public string Value { get; set; }
}
public void Post(TestDto testDto)
{
}
或者使用 Json。
但我想对此有更多的了解。
(1) 默认情况下,简单类型取自 URI。若要从请求正文中读取简单类型,请将 [FromBody] 属性添加到参数。(项目模板的已知问题。在 RTM 版本中,项目模板将包含此信息在 ValuesController 中。
(2)对于formurl编码,发送一个简单的类型为"=abc"而不是"value=abc";请参阅 http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1#sending_simple_types。