如何将对象数组传递到 $http.get 参数中

3

我有一个名为“ReferenceNumber”的对象。参考号码有“编号”和“类型”。

JavaScript对象的外观如下:

{
    "type" : ""
    "number" : ""
}

我需要将这些“ReferenceNumber”列表发送到 C# System.Web.Http.ApiController。我的方法如下所示:
[HttpGet]
[Route(@"")]
public HttpResponseMessage MyMethod([FromUri]List<ReferenceNumber> refNumbers)
{ 
    ... 
}

我正在使用Angularjs中的$http尝试进行所有API调用。 我希望能够像这样做:
$http.get("MYURL", obj);

但如果需要的话,我愿意使用jQuery.param或JSON.stringify。或者:

$http.get("MYURL", {params: {refNumbers: referenceNumbers}});

无论如何,但无论我尝试什么组合这些东西,包括硬编码,似乎都不能让列表被发送。我可以得到一个空列表、一个空的列表,或者一个带有数字和类型属性为空的项的列表,但是我无法获取我的数据。

我该如何正确地发送这些数据?发送列表就不行吗?如果是这样,为什么列表是不可接受的?我应该将我的列表打包在一个对象中吗?我必须使用[FromBody]而不是[FromUri]并强制将我的数据放在那里吗?


我知道Angular,但不熟悉ASP。你的ASP服务需要什么样的查询字符串?也就是说,如果你需要手动输入URL来调用这个服务并传入2个参考号码,你会输入什么? - JB Nizet
尝试简单地执行以下操作:{params: referenceNumbers}... 然后 URL 将是 ?number=123&type=sometype - charlietfl
@JB Nizet:如果我早点意识到您编辑了原始问题,我会更快地回答您的问题。我可能会尝试使用“MYURL?refNums={type:TYPE1, number:1234}&refNums={type:TYPE2, number:24423}”等类似的方式。 - K_Ram
你需要自己创建该字符串,或者尝试使用JSON.stringify创建。如果需要频繁使用,可以在$httpInterceptors中实现。不过,将其发送到服务器可能更加合理。 - charlietfl
所以你想要它们进行URL编码。有专门的库可以实现这个功能。Jquery似乎无法正常工作。 - z.a.
显示剩余7条评论
1个回答

2

你的问题可能已经解决了,但我会为那些未来可能遇到这个问题的人发布我的发现。

这个答案建议使用$httpParamSerializerJQLike参数序列化器。对我而言,这是唯一的方法,让我的C#后端能够理解该参数是一个复杂对象数组。

因此,在这种特定情况下,你需要执行以下操作:

$http.get("MYURL", {params: {refNumbers: referenceNumbers}, paramSerializer: '$httpParamSerializerJQLike'});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接