将对象的数组传递给webapi

我有一个.net mvc 4 webapi项目,我试图将一个对象数组传递给我的控制器上的方法。

我在SO上找到了一些关于需要设置我的对象属性的例子:param1 = whatever&param2 = bling&param3 = blah。

但我不知道如何使用它来传递集合。

这是我的方法签名。 注意我用[FromUri]属性修饰了参数。

public List GetPhoneNumbersByNumbers([FromUri] PhoneRequest[] id) { List prs = new List(); foreach (PhoneRequest pr in id) { prs.Add(PhoneNumberBL.GetSinglePhoneResult(pr.PhoneNumber, pr.RfiDate, pr.FinDate, pr.State)); } return prs; } 

这是我简单的PhoneRequest对象:

 public class PhoneRequest { public string PhoneNumber { get; set; } public string RfiDate { get; set; } public string FinDate { get; set; } public string State { get; set; } } 

这是我用来传递的样本:

 http://localhost:3610/api/phonenumber/getphonenumbersbynumbers/ [{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"}, {"PhoneNumber":"8018889999","RfiDate":"2012-12-01","FinDate":"","State":"UT"}] 

用这个回复“坏请求”

我也尝试过这个

 http://localhost:3610/api/phonenumber/getphonenumbersbynumbers? id=[{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"}, {"PhoneNumber":"8018889999","RfiDate":"2012-12-01","FinDate":"","State":"UT"}] 

它到达方法,但数组为null。

如何将PhoneRequest对象的数组传递给我的Web API方法?

尝试以这种格式从uri传递PhoneRequest []:

 http://localhost:3610/api/phonenumber/getphonenumbersbynumbers? id[0][PhoneNumber]=8016667777&id[0][FinDate]=2012-02-11&id[0][State]=UT& id[1][PhoneNumber]=8018889999&id[1][RfiDate]=2012-12-01&id[1][State]=UT 

我建议你使用POST。

当您查询字符串增长时,您将遇到URL最大长度的问题,这取决于浏览器。

如果你要传递很多参数,即使你真的只是GETting数据,POST也是完全可以接受的。 但是,您将丢失的是用户使用查询字符串为特定页面添加书签的function。

我创建了一个自定义模型绑定器, FieldValueModelBinder类,它可以有效地传递包含嵌套数组或通用列表类型数据的任何对象,查询字符串具有字段名称对,而不会嵌入任何JSON和XML结构。 模型绑定器可以解决上面讨论的所有问题。 由于这个问题由问题ID 19302078扩展,您可以在该主题中查看我的答案的详细信息。