我试图通过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#controller 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?
答案 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
}