从fiddler发布json会将空值留给apicontroller

时间:2014-03-17 02:06:29

标签: c# json asp.net-web-api fiddler

我试图通过fiddler发布一些json数据,这就是我在标题中的内容:

User-Agent: Fiddler
Content-Type: application/json; charset=utf-8
Host: localhost
Content-Length: 1176

体:

 [{
    'rows': [
        {
            'country': 'UK',
            'description': 'this is a desc',
            'gezien': true,
            'Count': 3,
            'url': 'een/twee',
            'stam': 'blabla',
            'kanaal': 'NOS'
        },
        {
            'url': 'drie/vier',
            'stam': 'divers',
            'kanaal': 'SRV'
        }

    ],
    'skip': 0,
    'take': 10,
    'total': 100
}]

我的网址是:

http://localhost/api/jason

c#c​​ontroller web api action:

// POST api/default1
public void Post([FromBody]string value)
{
    parseJson(value);

}

private void parseJson(object json)
{
    if (json!=null)
    {
        var list = JsonConvert.DeserializeObject<List<MyItem>>(json.ToString());
    }
}

当我执行I时,值为空,我得到一个204 httpcode。如何从fiddler调用它,以便它在值变量中返回一个jsonvalue?

1 个答案:

答案 0 :(得分:0)

以下是如何使这项工作。

将所有“在JSON中替换为\”。然后从请求正文中删除value=。将所有内容包裹在“”中。您的请求正文应该是这样的。

"[
  {
    \"id\": \"5241585099662481339\",
    \"displayName\": \"Music\",
    \"name\": \"music\",
    \"slug\": \"music\",
    \"imageUrl\": \"http://kcdn3.klout.com/static/images/music-1333561300502.png\"
  },
  {
    \"id\": \"6953585193220490118\",
    \"displayName\": \"Celebrities\",
    \"name\": \"celebrities\",
    \"slug\": \"celebrities\",
    \"imageUrl\": \"http://kcdn3.klout.com/static/images/topics/celebrities_b32741b6703151cc7bd85fba24c44c52.png\"
  },
  {
    \"id\": \"5757029936226020304\",
    \"displayName\": \"Entertainment\",
    \"name\": \"entertainment\",
    \"slug\": \"entertainment\",
    \"imageUrl\": \"http://kcdn3.klout.com/static/images/topics/Entertainment_7002e5d2316e85a2ff004fafa017ff44.png\"
  },
  {
    \"id\": \"3718\",
    \"displayName\": \"Saturday Night Live\",
    \"name\": \"saturday night live\",
    \"slug\": \"saturday-night-live\",
    \"imageUrl\": \"http://kcdn3.klout.com/static/images/icons/generic-topic.png\"
  },
  {
    \"id\": \"8113008320053776960\",
    \"displayName\": \"Hollywood\",
    \"name\": \"hollywood\",
    \"slug\": \"hollywood\",
    \"imageUrl\": \"http://kcdn3.klout.com/static/images/topics/hollywood_9eccd1f7f83f067cb9aa2b491cd461f3.png\"
  }
]"

这应该可行,但听起来很糟糕,因为这不是应该如何使用Web API。您应该让web API为您执行绑定,而不是手动执行绑定。如果您将操作方法​​签名更改为public void Post(MyItem[] value),那么您只需发布JSON(无值=),它将立即为您提供MyItem列表。您不需要使用JSON.NET并自己解析JSON。

更新

如果您想按原样保留JSON,可以选择几个选项

(1)将它绑定到一个类(复杂类型)。

(2)如果你想把JSON读成字符串,可以这样做。

public async Task Post(HttpRequestMessage request)
{
    string requestContent = await request.Content.ReadAsStringAsync();
    // use requestContent variable here
}