我有一个端点,它希望通过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&topiclength=2&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代码出错了什么?
答案 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})