这样一个GET接口:
其中一个参数professionIds是多选项
1 public SearchEnterpriseProfessionListResult SearchEnterpriseProfessionList(string token, List<Guid> professionIds)
ajax发起请求时,怎么对professionIds参数赋值!
求指点。
难道大家做webapi的时候 不存在这样的接口吗??或者用其他什么办法处理的?
感觉以前用MVC做接口的时候没这么多事事儿啊...
补充一下,仔细调试过,一个GET接口中出现两个List<>参数才会报错,一个List<>参数可以直接传数组。
List<Guid>???
恩,是的
简单理解: 就是一个用户查询北京市指定区的数据(区可以多选)
@彩色铅笔: 理论上List应该是跟数组等同的,报错是因为你传的不是guid吧?
@顾晓北: 是guid
@彩色铅笔: 服务器报错?你js的代码呢?
@顾晓北:
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) {
@彩色铅笔:
明明只接兩個幹嘛傳這麼多..
@RosonJ:
那只是随便举个例子,这才是真正的接口。报错就说这两个参数
ExceptionMessage=无法将多个参数(“professionIds”和“areaIds”)绑定到请求的内容。
@彩色铅笔: 这样服务器是收不到请求?还是收到了但是出错?
@彩色铅笔:
看下面
@RosonJ:
改成JSON.stringify(data),后服务器收不到请求了
var arr = new Array();
arr.push(...);
不行,webapi的接口这么做要报错:
ExceptionMessage=无法将多个参数(“professionIds”和“areaIds”)绑定到请求的内容。
@彩色铅笔:
试试
......?professionIds=a,b,c....
@Hurry: 还是一样的错...纠结
1:你可以传json序列化对象过去,应该可以解析,如:$('#order_form').serializeArray();
后台你可以直接:在后台接收,但我没有去测试,可以接收LIST没有,对象是可以接收的
2:如果还不行,你把他的API封装下,自己传json,后台解析完了,再把参数传给接口
其实正常的api这些方法都好使。但是我的API这次是用.NET WebAPI 2.0项目写的,没怎么仔细研究过,里面有很多不一样的地方。
想知道.NET webapi 的接口该怎么处理
@彩色铅笔: 不明白,你不是用AJAX进行传值吗,直接传当然List<Guid> professionIds无法解析,你传json,解析为List<Guid>,调接口不行?.NET webapi 的接口该怎么处理是想问什么,目前不清楚
@稳稳的河: 接口不让随便改,不能因为前端传不进来值就重构API接口啊。想从前端解决
@彩色铅笔: 没要你重构,你把数据处理下,这样一个LIST<Guid>,AJAX怎么直接给你解析的了,那你准备传什么对象过去,数组?
@稳稳的河: 恩,以前用MVC直接传数据是没问题的。想试试WEBAPI怎么传
@稳稳的河: 直接传数组,前端有一点不正确都会在后台解析不了,算了,你完全没有看我说什么
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", ...
這樣
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”上找不到与该请求匹配的操作。
@彩色铅笔:
data物件裡的單引號都拿掉呢?試試
@RosonJ: 测试了去掉单引号生成的参数一样的,还是一样的错
你如果是GET方式 那怎么处理结果都会体现在url上,那何不把Action的入参将List改成string 再将你的参数用特殊字符拼接起来
你,目前和API人员对接了。基本会按你说的方法去干...
但是总觉得webapi接收不了list参数,心有不甘啊
webapi可以接受数组.只是Querystirng传值时不好传数组.所以Querystirng传递的参数不能用数组.想要数组可以通过正文来传输.webapi里就要[frombody],给你写接口的人也是十分的水,让他上http://www.asp.net/web-api 去学学入门教程.
public string GetList([ModelBinder]List<string> id) { return "Receive:" + string.Join(",", id); }
URL:http://localhost:10961/product/GetList?id=1&id=2
我写了一个WebApi传参系列,相信你在其中能找到答案。
http://www.cnblogs.com/luhuanong/tag/WebApi/
顺便说一下List传参,以List<int> age参数为例,是以age[0]=1&age[1]=2形式传入的,WebApi会自动将其序列化成一个List<int>
这边测试: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)