Angular如何检查HttpRequest对象以设置标题的正确内容类型?

时间:2017-10-17 12:22:29

标签: json angular http

我的团队正在努力将我们的应用程序的前端重写为Angular。在我遇到文件导入视图之前,一切都或多或少顺利进行。我们的默认HttpHeaderEnricherInterceptor将默认Content-Type设置为application\json。它在整个应用程序中运行良好,但在尝试导入任何文件时,我得到的只是415.但是,如果我删除.set('Content-Type', 'application/json')导入工作正常...但所有其他组件都失败了。我试图根据HttpRequest参数制作一些if语句,但它不会识别has()方法以及我尝试过的其他方法。

我知道解决这个问题的最后一个选择是在每个请求上设置内容类型,但这是我想要的,更好地避免它,因为我们决定尝试找到问题的全局解决方案。

这是我的intercept()代码:

import { TokenService } from './../token/token.service';
import {Injectable} from '@angular/core';
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class HttpHeaderEnricherInterceptor implements HttpInterceptor {

  constructor(private tokenService: TokenService) { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log(`${req.url}?${req.params.toString()}`);

    const changedReq = req.clone(
      {headers:  req.headers
        .set('Authorization',  this.tokenService.getToken() || '')
        .set('Content-Type', 'application/json')
      });
    return next.handle(changedReq);
  }
}

感谢您的任何提示!

1 个答案:

答案 0 :(得分:1)

看起来Github已经打开了问题:https://github.com/angular/angular/issues/19730

变通方法很可能但很难看,即调用前后的全局布尔标志切换,添加伪标头作为指示符,即:

if(headers.get('X-Set-Content-Type') != null){
    headers.set('Content-Type', 'application/json')
}