9

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

我在这里找到了一些关于需要设置对象属性的示例:param1=whatever¶m2=bling¶m3=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 方法?

4

3 回答 3

10

尝试以这种格式从 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
于 2012-12-19T23:50:53.780 回答
7

我建议您为此使用 POST。

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

如果您有很多参数要传递,那么即使您实际上只是获取数据,POST 也是完全可以接受的。但是,您将失去的是用户使用查询字符串为特定页面添加书签的能力。

于 2012-12-20T05:13:04.900 回答
0

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

于 2013-12-26T21:17:29.373 回答