我有一个.net mvc 4 webapi项目,我正在尝试将一个对象数组传递给我的控制器上的方法。
我在SO上找到了一些关于需要设置对象属性的示例:param1 = whatever& param2 = bling& param3 = blah。
但我不知道如何使用它来传递集合。
这是我的方法签名。注意我用[FromUri]属性修饰了参数。
public List<PhoneResult> GetPhoneNumbersByNumbers([FromUri] PhoneRequest[] id)
{
List<PhoneResult> prs = new List<PhoneResult>();
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"}]
确实到达了该方法,但该数组为空。
如何将PhoneRequest对象的数组传递给我的Web API方法?
答案 0 :(得分:9)
尝试以这种格式从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
答案 1 :(得分:6)
我建议您使用POST。
当您查询字符串增长时,您将遇到URL最大长度的问题,这取决于浏览器。
如果你要传递很多参数,即使你真的只是GETting数据,POST也是完全可以接受的。但是,您将丢失的是用户使用查询字符串为特定页面添加书签的功能。
答案 2 :(得分:0)
我创建了一个自定义模型绑定器FieldValueModelBinder类,它可以有效地传递包含嵌套数组或通用列表类型数据的任何对象,查询字符串具有字段名对,而不会嵌入任何JSON和XML结构。模型绑定器可以解决上面讨论的所有问题。由于此问题已通过问题ID 19302078进行了扩展,因此您可以在该主题中查看我的答案的详细信息。