C# 从fiddler发布json会将空值留给ApicController
我试图通过fiddler发布一些json数据,这是我在标题中的内容:C# 从fiddler发布json会将空值留给ApicController,c#,json,asp.net-web-api,fiddler,C#,Json,Asp.net Web Api,Fiddler,我试图通过fiddler发布一些json数据,这是我在标题中的内容: User-Agent: Fiddler Content-Type: application/json; charset=utf-8 Host: localhost Content-Length: 1176 正文: 我的网址是: http://localhost/api/jason c#控制器web api操作: // POST api/default1 public void Post([FromBody]string v
User-Agent: Fiddler
Content-Type: application/json; charset=utf-8
Host: localhost
Content-Length: 1176
正文:
我的网址是:
http://localhost/api/jason
c#控制器web api操作:
// 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());
}
}
//POST-api/default1
公共作废帖子([FromBody]字符串值)
{
parseJson(值);
}
私有void parseJson(对象json)
{
if(json!=null)
{
var list=JsonConvert.DeserializeObject(json.ToString());
}
}
当我执行I时,该值为空,我得到一个204 httpcode。我如何从fiddler调用它,以便它在value变量中返回一个jsonvalue?下面是如何让它工作的 将所有“在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\"
}
]"
public async Task Post(HttpRequestMessage request)
{
string requestContent = await request.Content.ReadAsStringAsync();
// use requestContent variable here
}
这应该是可行的,但听起来很可怕,因为这不是WebAPI应该如何使用的。您应该让web API为您进行绑定,而不是手动进行绑定。如果您将操作方法签名更改为public void Post(MyItem[]value)
,那么您可以发布JSON(不带value=),它将立即为您提供MyItem
的列表。您不需要使用JSON.NET并自己解析JSON
更新
如果您想保持JSON的原样,有几个选项
(1) 将其绑定到类(复杂类型)
(2) 如果要将JSON作为字符串读取,请执行以下操作
"[
{
\"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\"
}
]"
public async Task Post(HttpRequestMessage request)
{
string requestContent = await request.Content.ReadAsStringAsync();
// use requestContent variable here
}
您是否寻找重复的问题,例如,您不需要在正文开头使用
value=
。我需要保持json格式不变(我更新了它,请参见上文)