[英]Can't get request headers values from Angular HTTP interceptor
在 Angular 应用程序中,我使用拦截器将令牌(在需要时)注入到请求标头中。 我还需要它将Content-Type
标头修改为适当的标头。 默认情况下,它必须是application/json
,但是有一个调用需要上传一个 ZIP 文件,所以我想让Content-Type
标头保持原样(对于这些情况,它类似于: Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvamnUWepE840OEuq
)。 我使用这个代码:
intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let usr = this.userService.getActualUser();
let confirmationToken = '';
let credentials = false;
let contentType = 'application/json';
// Check if the incoming request has an specific content type header
if (req.headers.has('Content-Type')) {
contentType = req.headers.get('Content-Type');
}
// ETC
}
问题是req.headers.has('Content-Type')
总是返回false
,所以我设置了错误的类型并且调用失败。 我究竟做错了什么?
提前致谢!
我相信您的表单内容是 FormData 对象的一个实例? 如果是这样的话,
if(req.body instanceof FormData)
如果您无法访问标题,此检查可能会帮助您或给您一些提示。 或者,您甚至可以更深入地检查req.body
对象以进行更具体的检查。
在您的请求期间,您希望看到content-type
但除非您直接指定它,否则您不会看到。
如果您有此要求,您将看到内容类型。
return this.http.get(this.ENDPOINT, {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
})
然而,这可能是一种矫枉过正。
另一种可能的解决方案是检查正文的实例类型,然后相应地设置标题
if (req.body instanceof FormData) {
contentType = 'multipart/form-data';
}
按照您的建议,我想出了一个非常简单的解决方案,即保留Content-Type
标头,就好像请求正文是表单数据一样,其余的设置为 JSON。 就像是:
if(!(req.body instanceof FormData)) {
contentType = 'application/json';
}
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.