0

创建默认的 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

这让我很惊讶,输入参数null,而不是abc。它肯定在 beta 版本中工作,但在 RC 版本中,我做错了什么或者它不再像这样工作了吗?

当然,我们还有另一种解决方法,方法是在下面创建强类型对象:

public Class TestDto
{
    public string Value { get; set; }
}

public void Post(TestDto testDto)
{  
}

或者使用 Json。

但我想对此有更多的了解。

4

1 回答 1

2

(1) 默认情况下,简单类型取自 URI。要从请求正文中读取简单类型,请将 [FromBody] 属性添加到参数中。(项目模板的已知问题。在 RTM 版本中,项目模板将在 ValuesController 中包含此问题。)

(2) 对于formurl-encoded,发送一个简单类型为“=abc”而不是“value=abc”;请参阅http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1#sending_simple_types

于 2012-08-08T20:23:05.627 回答