【问题标题】:How to pass an array of objects into $http.get params如何将对象数组传递给 $http.get 参数
【发布时间】:2017-01-17 02:03:49
【问题描述】:

我有一个名为“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 个参考编号调用此服务,您会输入什么?
  • 请原谅,我可能有错误的标签。它是一个 System.Web.Http ApiController。我会尝试修复标签。
  • “referenceNumbers”是 ReferenceNumber 对象的列表,而不是单个对象。列表中的每个对象都有一个名称和类型属性。
  • 尝试简单地做:{params: referenceNumbers} .... 那么 url 将是 ?number=123&amp;type=sometype
  • 请看上面的评论。我需要这些对象的列表,而不仅仅是单个对象。

标签: c# angularjs


【解决方案1】:

您的问题现在可能已经解决,但我将我的发现发布给将来可能遇到此问题的人。

This answer 建议使用$httpParamSerializerJQLike 参数序列化程序。对我来说,这是我的 C# 后端能够理解参数是复杂对象数组的唯一方式。

所以在这种特定情况下,您必须这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2018-09-09
    • 2010-10-16
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多