我正在使用Visual Studio 2012 RC。我使用默认路由并具有以下Web API控制器:
public class FooController : ApiController
{
// GET api/foo
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/foo/5
public string Get(int id)
{
return "value";
}
// POST api/foo
public string Post(string abc)
{
Console.WriteLine("value: {0}", abc);
return "foo" + abc;
}
// PUT api/foo/5
public void Put(int id, string value)
{
}
// DELETE api/foo/5
public void Delete(int id)
{
}
}
我想在Fiddler中对POST做一个简单的测试,所以我有
请求标头
用户代理:Fiddler
内容类型:application / json
请求正文
{{abc“:”def“}
当我调试请求时,参数abc为null,而不是“def”。我的Fiddler语法有问题吗?
答案 0 :(得分:5)
(1)默认情况下,从URI中获取简单类型。要从请求正文中读取简单类型,请将[FromBody]属性添加到参数中。
public string Post([FromBody] string abc)
(2)'{“abc”:“def”}'定义一个名为“abc”的属性 - 发送一个JSON字符串,请求体应该只是“def”
答案 1 :(得分:0)
这个答案来自ASP.Net Web API网站sending-html-form-data上的一个链接,后来证明是Mike的博客文章(我最初没有意识到)。 Web API团队通过参数绑定做出了一些与普通MVC控制器完全不同的决策。
发送“简单类型”的正确语法是
public HttpResponseMessage PostSimple([FromBody] string value)
{
// code goes here
在Fiddler,你把
=def //THIS CANNOT HAVE QUOTES AND = IS MANDATORY
好的,所以这些部分的工作方式与MVC完全不同。