首页新闻找找看学习计划

webapi GET接口出现List参数,ajax怎么传值!

0
悬赏园豆:50 [已解决问题] 解决于 2015-11-06 14:06

这样一个GET接口:

其中一个参数professionIds是多选项

1 public SearchEnterpriseProfessionListResult SearchEnterpriseProfessionList(string token, List<Guid> professionIds)

 ajax发起请求时,怎么对professionIds参数赋值!

求指点。

问题补充:

难道大家做webapi的时候 不存在这样的接口吗??或者用其他什么办法处理的?

感觉以前用MVC做接口的时候没这么多事事儿啊...

 

 

补充一下,仔细调试过,一个GET接口中出现两个List<>参数才会报错,一个List<>参数可以直接传数组。

彩色铅笔的主页 彩色铅笔 | 初学一级 | 园豆:99
提问于:2015-11-03 14:34
< >
分享
最佳答案
0

List<Guid>???

收获园豆:20
顾晓北 | 大侠五级 |园豆:9520 | 2015-11-03 16:45

恩,是的

简单理解: 就是一个用户查询北京市指定区的数据(区可以多选)

彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 16:47

@彩色铅笔: 理论上List应该是跟数组等同的,报错是因为你传的不是guid吧?

顾晓北 | 园豆:9520 (大侠五级) | 2015-11-03 16:56

@顾晓北: 是guid

彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 16:57

@彩色铅笔: 服务器报错?你js的代码呢?

顾晓北 | 园豆:9520 (大侠五级) | 2015-11-03 17:00

@顾晓北: 

var arr = new Array();
arr.push("67bbba80-37f6-4e7c-8616-5c5cb8683efa");
arr.push("67bbba80-37f6-4e7c-8616-5c5cb8683efa");
arr.push("67bbba80-37f6-4e7c-8616-5c5cb8683efa");

$.ajax({
url: Config.Order.url + "SearchEnterpriseProfessionList",
type: "GET",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
data: {
'token': token,
'professionIds': arr, //list《guid》参数
'addressCoordinateLat': 0,
'addressCoordinateLng': 180,
'currentViewRangeLat1': -1,
'currentViewRangeLng1': -1,
'currentViewRangeLat2': 180,
'currentViewRangeLng2': 180,
'cityId': cityId == null ? "67bbba80-37f6-4e7c-8616-5c5cb8683efa" : cityId,
'areaType': 0,
'areaIds': arr,  //list《guid》参数
'sortField': sortField,
'ascending': ascending,
'pageIndex': pageIndex,
'pageSize': pageSize

},
dataType: "json",
success: function (json) {

彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:03

@彩色铅笔: 

明明只接兩個幹嘛傳這麼多..

RosonJ | 园豆:2317 (老鸟四级) | 2015-11-03 17:10

@RosonJ: 

那只是随便举个例子,这才是真正的接口。报错就说这两个参数

ExceptionMessage=无法将多个参数(“professionIds”和“areaIds”)绑定到请求的内容。

彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:12

@彩色铅笔: 这样服务器是收不到请求?还是收到了但是出错?

顾晓北 | 园豆:9520 (大侠五级) | 2015-11-03 17:14

@彩色铅笔: 

看下面

RosonJ | 园豆:2317 (老鸟四级) | 2015-11-03 17:15

@RosonJ: 

改成JSON.stringify(data),后服务器收不到请求了

彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:35
其他回答(8)
0

var arr = new Array();

arr.push(...);

收获园豆:5
Hurry | 园豆:212 (菜鸟二级) | 2015-11-03 15:33

不行,webapi的接口这么做要报错:

ExceptionMessage=无法将多个参数(“professionIds”和“areaIds”)绑定到请求的内容。

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 15:39

@彩色铅笔: 

试试

......?professionIds=a,b,c....

支持(0) 反对(0) Hurry | 园豆:212 (菜鸟二级) | 2015-11-03 15:58

@Hurry: 还是一样的错...纠结

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 16:00
0

1:你可以传json序列化对象过去,应该可以解析,如:$('#order_form').serializeArray();

后台你可以直接:在后台接收,但我没有去测试,可以接收LIST没有,对象是可以接收的

2:如果还不行,你把他的API封装下,自己传json,后台解析完了,再把参数传给接口

收获园豆:10
稳稳的河 | 园豆:4183 (老鸟四级) | 2015-11-03 16:49

其实正常的api这些方法都好使。但是我的API这次是用.NET WebAPI 2.0项目写的,没怎么仔细研究过,里面有很多不一样的地方。

想知道.NET webapi 的接口该怎么处理

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 16:52

@彩色铅笔: 不明白,你不是用AJAX进行传值吗,直接传当然List<Guid> professionIds无法解析,你传json,解析为List<Guid>,调接口不行?.NET webapi 的接口该怎么处理是想问什么,目前不清楚

支持(0) 反对(0) 稳稳的河 | 园豆:4183 (老鸟四级) | 2015-11-03 16:56

@稳稳的河: 接口不让随便改,不能因为前端传不进来值就重构API接口啊。想从前端解决

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:01

@彩色铅笔: 没要你重构,你把数据处理下,这样一个LIST<Guid>,AJAX怎么直接给你解析的了,那你准备传什么对象过去,数组?

支持(0) 反对(0) 稳稳的河 | 园豆:4183 (老鸟四级) | 2015-11-03 17:10

@稳稳的河: 恩,以前用MVC直接传数据是没问题的。想试试WEBAPI怎么传

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:13

@稳稳的河: 直接传数组,前端有一点不正确都会在后台解析不了,算了,你完全没有看我说什么

支持(0) 反对(0) 稳稳的河 | 园豆:4183 (老鸟四级) | 2015-11-03 17:13
0
var arr = new Array();
arr.push("67bbba80-37f6-4e7c-8616-5c5cb8683efa");
arr.push("67bbba80-37f6-4e7c-8616-5c5cb8683efa");
arr.push("67bbba80-37f6-4e7c-8616-5c5cb8683efa");

var data = {
    'token': token,
    'professionIds': arr, //list《guid》参数
    'addressCoordinateLat': 0,
    'addressCoordinateLng': 180,
    'currentViewRangeLat1': -1,
    'currentViewRangeLng1': -1,
    'currentViewRangeLat2': 180,
    'currentViewRangeLng2': 180,
    'cityId': cityId == null ? "67bbba80-37f6-4e7c-8616-5c5cb8683efa" : cityId,
    'areaType': 0,
    'areaIds': arr,  //list《guid》参数
    'sortField': sortField,
    'ascending': ascending,
    'pageIndex': pageIndex,
    'pageSize': pageSize
};

$.ajax({
    url: Config.Order.url + "SearchEnterpriseProfessionList",
    type: "GET",
    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    data: JSON.stringify(data),
    dataType: "json",
    ...

這樣

收获园豆:5
RosonJ | 园豆:2317 (老鸟四级) | 2015-11-03 16:59

http://localhost:5024/api/Order/SearchEnterpriseProfessionList?{%22token%22:%224CF587F3-1963-488E-8DE1-EE4B6B08B1E3%22,%22professionIds%22:[%2267bbba80-37f6-4e7c-8616-5c5cb8683efa%22],%22addressCoordinateLat%22:0,%22addressCoordinateLng%22:180,%22currentViewRangeLat1%22:-1,%22currentViewRangeLng1%22:-1,%22currentViewRangeLat2%22:180,%22currentViewRangeLng2%22:180,%22cityId%22:%2267bbba80-37f6-4e7c-8616-5c5cb8683efa%22,%22areaType%22:0,%22areaIds%22:[%2267bbba80-37f6-4e7c-8616-5c5cb8683efa%22],%22sortField%22:%22Time%22,%22ascending%22:false,%22pageIndex%22:1,%22pageSize%22:10}

 

这样做后,整个链接是这样的

 

现在报错找不到Action了...

MessageDetail=在控制器“Order”上找不到与该请求匹配的操作。

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:32

@彩色铅笔: 

data物件裡的單引號都拿掉呢?試試

支持(0) 反对(0) RosonJ | 园豆:2317 (老鸟四级) | 2015-11-03 17:47

@RosonJ: 测试了去掉单引号生成的参数一样的,还是一样的错

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:52
0

你如果是GET方式 那怎么处理结果都会体现在url上,那何不把Action的入参将List改成string 再将你的参数用特殊字符拼接起来

收获园豆:10
Zery | 园豆:6066 (大侠五级) | 2015-11-03 17:48

你,目前和API人员对接了。基本会按你说的方法去干...

但是总觉得webapi接收不了list参数,心有不甘啊

支持(0) 反对(0) 彩色铅笔 | 园豆:99 (初学一级) | 2015-11-03 17:50
0

webapi可以接受数组.只是Querystirng传值时不好传数组.所以Querystirng传递的参数不能用数组.想要数组可以通过正文来传输.webapi里就要[frombody],给你写接口的人也是十分的水,让他上http://www.asp.net/web-api 去学学入门教程.

吴瑞祥 | 园豆:28731 (高人七级) | 2015-11-03 21:47
0
public string GetList([ModelBinder]List<string> id)
        {
            return "Receive:" + string.Join(",", id);
        }

URL:http://localhost:10961/product/GetList?id=1&id=2

jello chen | 园豆:7091 (大侠五级) | 2015-11-03 23:42
0

我写了一个WebApi传参系列,相信你在其中能找到答案。

http://www.cnblogs.com/luhuanong/tag/WebApi/

顺便说一下List传参,以List<int> age参数为例,是以age[0]=1&age[1]=2形式传入的,WebApi会自动将其序列化成一个List<int>

露华浓 | 园豆:161 (初学一级) | 2015-11-07 14:52
0

这边测试:get方法传递数组如下

http://localhost:62096/api/Search?categoryId=18&type[]=104&type[]=104&type[]=103&type[]=102&pageNumber=1&itemCount=30

webapi接口search中如下:

 public SearchDataFormat Search(string categoryId = null, string query = null, [FromUri]string[] type = null, string itCode = null, int day = 0, int pageNumber = 1, int itemCount = 0)

 

黑峰 | 园豆:544 (小虾三级) | 2016-05-19 17:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册