我正从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请求?
答案 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()
中将其作为一个功能提供给出足够令人信服的论证(以及实施者的兴趣)。