2012-08-08 138 views
0

当创建一个默认的ASP.NET Web API项目,默认ValuesController具有交方法是这样的:的ASP.NET Web API:从默认ValuesController POST方法是不是在RC版本工作

// 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。

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

+0

你确定你的控制器中有公共无效的Post吗?或者它是公开的ActionResult Post(字符串的东西) – Rajesh 2012-08-08 20:01:37

+0

是的,我相信,Actioneuslt是在MVC中,而不是Web API – 2012-08-08 20:14:06

+0

哦,我看到,我似乎混合了MVC和Web API。谢谢Cuong – Rajesh 2012-08-08 20:40:50

回答

2

(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

+0

感谢您的回答和良好的博客文章 – 2012-08-08 20:41:32