停止 http 拦截器覆盖从服务层 angular 传递的 headers

Stop http interceptor to overwrite the headers passed from service layer angular

我有一个 API 以纯文本形式发送数据。我需要在服务层传递 { responseType:'text'} 但它没有到达拦截器。 如何为特定的 API 传递 headers & responseType,以便它到达拦截器并基于 API URL,可以传递来自服务层的 header ?

拦截器代码-

@Injectable()
export class JwtInterceptor implements HttpInterceptor {
  constructor(private authenticationService: AuthenticationService) {}
  intercept(
    request: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    // add authorization header with jwt token if available
    console.log("request", request.headers);
    const token = this.authenticationService.currentUserValue;
    if (token && token.token) {
        if (!request.url.includes("testAPI/")) {
          const newRequest = request.clone({
            setHeaders: {
              Authorization: `Bearer ${token.token}`,
            }
          });
          return next.handle(newRequest);
        } else {
          const newRequest = request.clone({
            setHeaders: {
              Authorization: `Bearer ${token.token}`,
              "Content-Type": "text/plain",
              Accept: "text/plain",
              responseType: "text",
            }
          });
          return next.handle(newRequest);
        }
      
    }
  }
}

服务代码-

testFunction(token) {
    let headers = new HttpHeaders();
    headers = headers.set('Authorization', `Bearer ${token}`);

    headers = headers.set("Content-Type", "text/plain");
    headers = headers.set('Accept', "text/plain");
    return this.apiSrv.get(TEST_API, {headers:headers,responseType:'text'});
 }

它在禁用 http 拦截器并传递如下选项后起作用。 responseType 参数应与 header 分开传递以使其工作。

{headers:headers,responseType:'text'}

但我不想 disable/remove 拦截器。当我启用拦截器时,它要么覆盖服务中传递的 headers,要么 headers 没有到达拦截器。我在 testFunction 中通过了 headers 但是当我调试时它显示。

请指导我。如何让它发挥作用?

我像下面这样在拦截器中传递了 headers,它起作用了。

const newRequest = request.clone({ setHeaders: { Authorization: Bearer ${token.token}, "Content-Type": "text/plain", Accept: "text/plain" },responseType: "text", });