什么是不对的ASP.Net和提琴手的例子吗?(What is wrong with this ASP

2019-09-21 00:51发布

我使用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)
    {
    }
}

我想做POST在提琴手的一个简单的测试,所以我有

请求头
用户代理:提琴手
内容类型:应用程序/ JSON

请求体
{ “ABC”: “DEF”}

当我调试的要求,参数ABC进来为空,而不是“高清”。 是不是有什么毛病我提琴手语法?

Answer 1:

(1)默认情况下,简单类型被从URI服用。 读取来自请求主体的简单类型,[FromBody]属性添加到参数。

public string Post([FromBody] string abc)

(2)“{‘ABC’:‘DEF’}”限定了具有名为“abc”属性的对象 - 发送一个JSON串,请求体应该只是“DEF”



Answer 2:

这个答案来自一个链路上的ASP.Net的Web API网站送的HTML表单数据 ,这原来是小李的博客文章(我没有意识到,在第一)。 在Web API团队已经与参数绑定是从正常的MVC控制器完全不同的几个决定。

发送“简单类型”正确的语法是

public HttpResponseMessage PostSimple([FromBody] string value)
{
// code goes here

而在提琴手,你把

=def          //THIS CANNOT HAVE QUOTES AND = IS MANDATORY

好了,这里是从MVC的工作非常不同的部分。

  1. 您必须使用[FromBody],麦克说。
  2. 你只能有1个参数。 如果你想超过1个参数,你有两个选择:1)使用URL查询参数,而不是请求体或ii)使用一个复杂的对象(即自己的类)。
  3. 请求主体应该是一个简单= DEF,不能使用命名参数。


文章来源: What is wrong with this ASP.Net and Fiddler example?