Angular2 http与身体GET?

时间:2016-02-03 18:05:34

标签: get angular

我正从Angular2网站查询一些弹性搜索服务器。为了帮助提高安全性,我们希望锁定对GET请求的访问权限。 Elasticsearch支持GET与一个正文,但我在使用Angular2的http类时遇到了麻烦。

this.http.post(SearchEndpoint, q.BuildPayload(), { method: 'GET' })

由于http.get没有body参数,我尝试使用post方法。以前我会放弃{ method: 'GET' }的RequestOptionsArgs,POST将成功通过正文。通过在第三个参数中指定方法,http类将从请求中删除正文。

是否可以在Angular 2中使用正文发出GET请求?

3 个答案:

答案 0 :(得分:9)

我认为原始XHR对象不允许这样做。引用规范(见https://xhr.spec.whatwg.org/):

  

4.5.6 send()方法

     

客户。发送([body = null])

     

发起请求。可选参数提供请求体。

     

如果请求方法是GET或HEAD,则忽略该参数。

     

send(body)方法必须执行以下步骤:

     
      
  • 如果未打开状态,则抛出InvalidStateError异常。

  •   
  • 如果设置了send()标志,则抛出InvalidStateError异常。

  •   
  • 如果请求方法是GET或HEAD,请将body设置为null。

  •   

Postman github中的这个讨论也可以帮助你:https://github.com/postmanlabs/postman-app-support/issues/131

如果要查询ElasticSearch服务器,可以使用POST请求。这是一个示例:

POST http://localhost:9200/myindex/mytype/_search?pretty=true
Content-Type: application/json

{
  "query": {
    "match": {
      "somefield": "some value"
    }
  }
}

希望它可以帮到你, 亨利

答案 1 :(得分:0)

您可以使用request

上的通用Http方法覆盖此方法
this.http.request(SearchEndpoint, new RequestOptions({
    method: RequestMethod.Get,
    body: q.BuildPayload()
})).subscribe(...);

答案 2 :(得分:0)

FWIW,我很想知道为什么在https://github.com/whatwg/fetch/issues/83中这是可取的。目前还没有基于浏览器的API支持这一点,但我们可以在fetch()中将其作为一个功能提供给出足够令人信服的论证(以及实施者的兴趣)。