Internet Explorer 11和角度HttpClient post的填充问题
问题描述:
我无法让我的角度4应用程序在IE 11中使用新的httpclient文章工作。此问题只与IE11有关,并且在Chrome中运行正常。Internet Explorer 11和角度HttpClient post的填充问题
从我可以看到,不同的是我发送到服务器的后身。在Chrome浏览器,它的格式是这样的:
而且在IE11同一物体看起来像这样:
可以将这些符号性乱了对象,以便它不会被接受在服务器上?如果我不使用拦截器解析错误消息,我只是得到内部服务器错误(500)。
这是我指定给全身对象:
让身体= {
FROM日期:form.fromDepDate,//日期
TODATE:form.toDepDate,//日期
UserIds:userIds //字符串数组
};
答
不是100%确定我明白你的问题。它看起来像许多角度用户在IE中遇到的问题。这个问题是http请求实际上通过了,但是由于它不能解析服务器响应而被视为错误(但是你谈论500s?如果实际上得到500个内部服务器错误,那么它很可能是后端的一个问题)
如果你没有得到500s,但如上所述的行为吸引,这似乎是一个错误IE11(和其他人)与角度4+。它看起来像HttpClient不能分析空的200响应。
在angular repo上跟踪错误。
虽然被定格在角5.2.4,如果你不能或不会更新,多种解决方法似乎工作:
- 一种可能性是改变你的服务器返回
204 No Content
代替响应正文为空时 - 另一种可能的解决方法是使用HTTP拦截器来执行工作as compeek suggested。
这是我的解决方案:
@Injectable()
export class EmptyResponseBodyInterceptor implements HttpInterceptor {
intercept(req: HttpRequest <any> , next: HttpHandler): Observable < HttpEvent <any>> {
req = req.clone({
responseType: 'text'
});
return next.handle(req)
.map((res) => {
if (res instanceof HttpResponse) {
if (res.body === 'OK') {
res.clone({
body: null
});
} else {
res = res.clone <any> ({
body: res.body !== '' ? JSON.parse(res.body) : null
});
}
}
return res;
});
}
}