首页 新闻 会员 周边 捐助

Web api Request Body post传递多对象参数问题

0
[已解决问题] 解决于 2016-05-04 13:17

http://localhost:7351/API/Account/checkAccount

 

User-Agent: Fiddler
Host: localhost:7351
Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
Content-Type: application/x-www-form-urlencoded;charset=utf-8
Content-Length: 48

 

Request Body 填写 为 json={account:"admin",passwd:"123456",level:"1"}

 

public class User_VM
{

public string account { get; set; }
public string passwd { get; set; }
public string level { get; set; }
}

后台接收函数为 public HttpResponseMessage checkAccount(User_VM p)

后台接收到的值总为空 

 

 

当格式填写 {account:"admin",passwd:"123456",level:"1"}

 application/json; charset=utf-8后台可以接收到数据

但 需求方希望   Request Body 填写 为

 json={account:"admin",passwd:"123456",level:"1"}

谢谢各位!

 

ningGis的主页 ningGis | 菜鸟二级 | 园豆:204
提问于:2016-05-02 19:01
< >
分享
最佳答案
0

1.他传的不是json.

2.你要让他给自己这种格式起个名字

3.让他在请求头中的正文类型中.用他这个起的新名字.

以上是废话

MediaTypeFormatter 在webapi里可以自定义这个东西.就能根据现有个格式进行解析.

http://www.cnblogs.com/artech/archive/2013/12/05/3460544.html

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2016-05-02 20:26

您好,对方用 Java写的后台服务  通过Content-Type: application/x-www-form-urlencoded;charset=utf-8 请求体post   json={**} 可以正常返回数据。 我想问下 我所有采用.net web api 只能在Content-Type: application/json; charset=utf-8 请求体只能post  {**}这种类型数据 想问下是哪里出现了问题?谢谢

ningGis | 园豆:204 (菜鸟二级) | 2016-05-03 14:17

@ningGis: webapi默认的MediaTypeFormatter  只有xml和json.不能解析form表单数据的.

最简单的办法是你别用[frombody]了.直接在action里request.content.readasform()["Json"]

就能取到json字符串了.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-05-03 14:20

@吴瑞祥:    采用了这种方式解决了问题

public HttpResponseMessage checkAccount1(FormDataCollection form)
var str = form["Json"];
_User p = JsonConvert.DeserializeObject<_User>(str);

谢谢您的帮助!

ningGis | 园豆:204 (菜鸟二级) | 2016-05-04 13:12
其他回答(3)
0

MVC或者webAPI通过JSON方式POST数据,JS里面post的data要JSON.stringify(你的JSON),你试一下!

如果不行,尝试使用URL FORMData是一样的

Я!ńɡ | 园豆:268 (菜鸟二级) | 2016-05-03 08:52

对方说 app这块只能接受 json={***} 这种格式的数据,并且在fidder测试时,他所写的Java后台可以接收到 Json={***}格式数据, 而我采用的。net web api 在Content-Type: application/x-www-form-urlencoded;charset=utf-8 后台无法正常接收到数据,谢谢。

支持(0) 反对(0) ningGis | 园豆:204 (菜鸟二级) | 2016-05-03 14:20

@ningGis: 你这样传递就不是JSON了,wenapi端口只会人为你传递过来的是个key,value对象,解析json这个key为一个stirng类型,值是string类型的Json数据而已。你需要自己反序列化

支持(0) 反对(0) Я!ńɡ | 园豆:268 (菜鸟二级) | 2016-05-04 08:51

@Я!ńɡ:  

 

public HttpResponseMessage checkAccount1(FormDataCollection form)
var str = form["Json"]; 接收到值后再进行转换一下
_User p = JsonConvert.DeserializeObject<_User>(str); 可以正常访问到数据了

谢谢!

支持(1) 反对(0) ningGis | 园豆:204 (菜鸟二级) | 2016-05-04 13:13
0

http://weblog.west-wind.com/posts/2012/Aug/16/Mapping-UrlEncoded-POST-Values-in-ASPNET-Web-API

 

喵喵喵猫 | 园豆:1742 (小虾三级) | 2016-05-03 16:24

看了下您题的这文章 里边FormDataCollection form对我帮助很大!

public HttpResponseMessage checkAccount1(FormDataCollection form)

var str = form["Json"];
_User p = JsonConvert.DeserializeObject<_User>(str);

谢谢~!

支持(0) 反对(0) ningGis | 园豆:204 (菜鸟二级) | 2016-05-04 13:14
0

综合了下各位的帮助 


public HttpResponseMessage checkAccount1(FormDataCollection form){

var str = form["Json"];
_User p = JsonConvert.DeserializeObject<_User>(str);

}

成功获得所需对象

ningGis | 园豆:204 (菜鸟二级) | 2016-05-04 13:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册