【问题标题】:Post multidimensional array (string[][]) in angular using HttpClient / HttpParams使用 HttpClient / HttpParams 以角度发布多维数组(字符串 [] [])
【发布时间】:2018-03-31 00:49:36
【问题描述】:

我无法找到有关使用 Angular (2+) 执行此操作的最佳实践方法的指导。 Angular 的 HttpClient 的 post function 有一个 HttpParams 参数。 HttpParams 是[param: string]: string | string[] 类型的键/值映射。但是,我需要发布一个多维数组 (2D) 参数 (string[][])。即

this.http.post(url, {}, {
    params: {
        2d: [ [ 'arr1' ], [ 'arr2' ] ]
    }
});

但这似乎不受 angular 的 HttpParams 类的支持。在搜索其他问题时,我发现

我想知道是否有一种干净的方法可以在角度上做到这一点。如果没有,为什么 Angular 做出这个设计决定?有什么解决方法?

【问题讨论】:

  • 您真的需要将该矩阵作为查询参数传递吗?为什么不在请求正文中发送呢?

标签: angular http post multidimensional-array parameters


【解决方案1】:

你能把它作为一个 json 数组发送吗?

let data= [
    ["string1","string2"],
    ["string3", "string4"]
 ];


let body= {
 content: data
};

this.http.post(url, body)

【讨论】:

    【解决方案2】:

    感谢@Jota.Toledo、@David 和"Is there any difference between using request.body or request.params", 上的这个问题,我的主要误解是尝试对所有内容使用 HttpParams 并忽略请求正文。我的问题的最佳解决方案是在 请求正文 中简单地传递多维数组。

    出于几个原因,这是“最佳实践”方式

    • 请求体对数据的复杂度没有任何限制(type "any" in the angular docs
    • 使用正文不会对 url 中的数据进行编码,这样可以避免在传递过多数据时出现潜在状态 414(Request-URI Too Long)
    • 遵循 RESTful 模式,您通常将参数用于 GET 请求,将正文用于 POST 请求 (Stack Overflow question source)

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多