首页 新闻 会员 周边

急,webapi获取不到post上来的数据?

0
悬赏园豆:100 [已解决问题] 解决于 2015-03-29 06:38
 /// <summary>
        /// 这是一个方法
        /// </summary>
        /// <param name="model">这是一个model</param>
        /// <returns></returns>
        [HttpPost]
        public Response<string> PostListModel([FromBody]List<model> list)
        {
        }    

 

var postdata = '[{"ID":1,"mobile":214,"Name":"ff%d","Phone":"5255","CreateDate":"","MID":-1}]';
            $.ajax({
                type: 'POST',
                contentType: "application/json; charset=urf-8",
                url: 'http://localhost:50750/api/test/PostListModel', 

          //data: JSON.stringify(postdata),
          data: postdata,
         dataType:
'json',
         success: function (result) { alert(result); },
          error: function (e) { alert(e); } });

这样获取到的list里面显示有一条数据,但是除了ID是显示为0,其它都显示为空

如果用

JSON.stringify(postdata)方法的话,则会显示为空
枫叶飘零黄昏血的主页 枫叶飘零黄昏血 | 初学一级 | 园豆:11
提问于:2015-03-29 00:59
< >
分享
最佳答案
0

后端代码接受的参数是 ‘list‘,那么前端js应该这样写:

$.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel',

          data:{ list: JSON.stringify(postdata)}, 
         dataType: 'json',
         success: function (result) { alert(result); },
          error: function (e) { alert(e); } });

收获园豆:100
Jerry柯 | 菜鸟二级 |园豆:496 | 2015-03-29 01:46

我试了下,发现这样还是不行,现在主要是安卓端提交上来的JSON找不到对应的控制器方法,那个控制器里只有一个POST的方法的,安卓那边的说:

现在的post是http的body就是json,你要获取就输获取整个body的数据的

,请问这个情况怎么解决啊?客户明天要就交项目了的……求了

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2015-03-29 01:51

@枫叶飘零黄昏血: 我开项目试了下。 可以利用字符串+反序列化实现你要的功能。

$.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel', 

          data:{ list: JSON.stringify(postdata)}, 
         dataType: 'json', 
         success: function (result) { alert(result); }, 
          error: function (e) { alert(e); } });

后端:

public Response<string> PostListModel(string s) {

List<model> us = Newtonsoft.Json.JsonConvert.DeserializeObject<List<model>>(list);

}

Jerry柯 | 园豆:496 (菜鸟二级) | 2015-03-29 02:11

$.ajax({ type: 'POST', contentType: "application/json; charset=urf-8", url: 'http://localhost:50750/api/test/PostListModel', 

          data:{ list: postdata}, 
         dataType: 'json', 
         success: function (result) { alert(result); }, 
          error: function (e) { alert(e); } });

前端这样写

Jerry柯 | 园豆:496 (菜鸟二级) | 2015-03-29 02:12

@枫叶飘零黄昏血: 

让Android开发的同事提交给你 的对象序列化就可以。 我们现在的项目就是同步这样的方式和MVC交互数据

Jerry柯 | 园豆:496 (菜鸟二级) | 2015-03-29 02:14

@XIAO小蜗牛: 我叫他试一下,序列化的时候Model中的每个字段都要列出来的吗?不管有用到没用到的?

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2015-03-29 02:21

@枫叶飘零黄昏血: 不用每个字段,只接收需要的字段即可

Jerry柯 | 园豆:496 (菜鸟二级) | 2015-03-29 02:24

@XIAO小蜗牛: 现在服务端可以找到相应的方法了,不过接收到的list是null,没有值,这个是为什么啊?

安卓端说:我这边传的是集合

是不是还要把集合也序列化的啊?

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2015-03-29 02:37

@枫叶飘零黄昏血: 把整个集合序列化。 你接收用 string 接收,然后反序列化。

Jerry柯 | 园豆:496 (菜鸟二级) | 2015-03-29 02:43

@枫叶飘零黄昏血: 不需要。 

Jerry柯 | 园豆:496 (菜鸟二级) | 2015-03-29 03:00

@罗玉虎: 我试了一下,把[HttpPost]和[FromBody]这些都去掉了,发现POST的时候不会进那个方法了,安卓那边POST的时候要对应服务端的string的参数名的吗?还是有什么讲究的?

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2015-03-29 03:22

@罗玉虎: 我把[HttpPost]和[FromBody]这些加上了也不行,传进来的string是空的,这里面有什么特别的讲究的吗?

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2015-03-29 03:29

搞定了,虽然不是用你这种方法解决的,但还是感谢你那么晚了还回答我问题,我在CSDN也花了一百金提问,你有号的话也过去领了吧http://bbs.csdn.net/topics/391005911

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2015-03-29 06:38

@枫叶飘零黄昏血: 请问怎么解决的

酱油荷 | 园豆:3 (初学一级) | 2016-05-16 14:42

@酱油荷: 如果是POST,用实体来接收就算加了[FromBody]也还是接收不到的,只能是自己从请求内容中一个个接收了,现在我是专门写了个反射的方法来自动找的。

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2016-05-16 15:19

@酱油荷: 如果是POST,用实体来接收就算加了[FromBody]也还是接收不到的,只能是自己从请求内容中一个个接收了,现在我是专门写了个反射的方法来自动找的。(忘了个重要的条件了,是带文件的才会这样,其它的还是正常的。)

枫叶飘零黄昏血 | 园豆:11 (初学一级) | 2016-05-16 15:19
其他回答(2)
0

json 提交 首先一端先要序列化成json字符串进行传递,然后接收端反序列化成对应的数据类型。当然要注意中文的问题,也就是编码。

baidixing | 园豆:107 (初学一级) | 2015-03-31 13:24
0

楼主,你怎么解决的,我也遇到跟你一模一样的情况,除了I'd是0,其他都为null

不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2016-03-19 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册