【问题标题】:How to set a null value for "Content-Type" header in Angular interceptor?如何在 Angular 拦截器中为“Content-Type”标头设置空值?
【发布时间】:2020-12-09 09:48:08
【问题描述】:

我在我的 Angular 应用程序中有一个特定的请求,我在其中将带有图像详细信息对象的图像上传到服务器。我在流程中为模块的所有 api 请求添加了一个拦截器,以便为服务器附加一些通用信息,但是对于这个特定请求,我不需要将 Content-Type 标头设置为默认值到应用程序/json。

Angular 拦截器默认添加 application/json,现在用于文件上传请求,如果我设置:

"Content-Type": null
"Accept": multipart/form-data

当我把它放在服务方法中时,上面的工作没有拦截器,那么如何在拦截器中修改 Content-Type 标头并将其设置为 null?

主要问题如下:

request.clone({body: examplebodyObject, setHeaders: { 'Content-Type': null }});

nullundefined 不被接受为拦截器中的标头值,我也尝试从请求中删除 Content-Type 标头,但它仍然不起作用.

我现在有以下代码:

request = request.clone({ body: this.someFunction(request, 
otherParam), setHeaders: {
      'Accept': 'multipart/form-data'
    } });
request.headers.delete('Content-Type');

【问题讨论】:

    标签: angular request interceptor content-type angular-http-interceptors


    【解决方案1】:

    您应该根据克隆的请求修改标头,并将克隆的请求传递给下一个处理程序。

    const clonedReq = request.clone()
    clonedReq.headers.delete('Content-Type');
    return next.handle(clonedReq);
    

    【讨论】:

    • 我在问题中提到我试图删除它,但它不起作用
    • 你检查了请求头还是响应头?
    • 请求头,即使删除了Content-Type,仍然添加为application/json
    • 您能再检查一下吗?请求头不是响应头。
    • 找到了拦截​​器的序列以确保最后一个不包含'Content-Type'集。 clonedReq.​​headers.delete 应该可以工作,如果有任何其他问题,只需调试。
    【解决方案2】:

    试试这个问题How to add multiple headers in Angular 5 HttpInterceptor的解决方案

    像这样跳过 Content-Type:

      const newReq = req.clone({
        body: examplebodyObject,
        headers: new HttpHeaders({
          Accept: 'multipart/form-data'
        })
      });
    

    【讨论】:

    • 我尝试了上述方法,它仍然在请求标头中添加“application/json”作为 Content-Type
    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多