Angular POST对CURL POST的不同响应

时间:2017-11-10 09:09:41

标签: angular typescript post

我有一个端点,它希望通过post请求接收大量数据(10mb +),并以一些JSON响应。端点在ASP.NET上运行,我无法控制它。

从我的机器上,我可以通过curl发送一个示例文件,它会获得一个虚拟的JSON响应,例如:

$ cat data.txt | curl -X POST -d "@-" "http://{omitted}/?numtopics=2&topiclength=2&passes=2"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 7611k  100   834  100 7610k     75   691k  0:00:11  0:00:11 --:--:--   252
{"JSON REPONSE..."}

然而,当我尝试从Angular调用它时,我得到一个完全不同的

fileChange(event) {
    var fileReader = new FileReader();
    fileReader.readAsBinaryString(event.target.files[0]);
    fileReader.onload = data => {
      this.http.post('http://{omitted}/?numtopics=2&topiclength=2&passes=2', fileReader.result)
        .map(res => res.json())
        .catch(x => {
          return Observable.throw(x)
        })
        .subscribe(
          data => console.log(data),
          error => console.error(error));
    }
  }

在这里,我得到以下HTML响应,而不是预期的JSON响应:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form method="post" action="./?numtopics=2&amp;topiclength=2&amp;passes=2" id="InputData">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="Qrcz5rvSPx2C1sHcD5F4bac+Uitth2vxAxSPfWdXSaigf52n46StPyoNiNNnVKj9QKodTIPyRCkpLmTDJqDS7XR/DPeNDv96B29H5w6Uxqf6VeCm5FJHNqL98+YGppIz" />
</div>

<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
</div>
    <div>

    </div>
    </form>
</body>
</html>

我的Angular代码出错了什么?

1 个答案:

答案 0 :(得分:0)

发现了我所缺少的东西。通过在curl中使用详细模式,我能够看到它自动添加了content-type标头。通过将此添加到角度POST请求,它可以工作。

添加标题的代码如下:

var fileReader = new FileReader();
    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    fileReader.readAsBinaryString(event.target.files[0]);
    fileReader.onload = data => {
      this.http.post('http://{url}/?numtopics=2&topiclength=2&passes=2', fileReader.result, {headers: headers})