How to pass an HttpInterceptor parameter?

I am using Angular 4.3.1 and HttpClient. There is an HttpInterceptor for setting some headers.

In some HTTP requests, I need to set a different header. Anyway, can I pass some parameter to this HttpInterceptor for this particular HttpRequest?

@Injectable()
export class MyHttpInterceptor implements HttpInterceptor {

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if(request.custom.param1) // how can i do this 
      request = request.clone({
        setHeaders: {
          'header1': 'xxxxxx'
          }
      });

    else
      request = request.clone({
        setHeaders: {
          'header2': 'yyyyyy'
          }
      });


    return next.handle(request);
  }
}
+6
source share
1 answer

There may be a better way to handle this problem, but as a workaround, you can create and submit a custom HttpParamsrequest and then check them in the interceptor. For example:

export class CustomHttpParams extends HttpParams {
  constructor(public param1: boolean) {
   super();
  }
}

Using this class in an http call:

this.http.get('https://example.com', {
  params: new CustomHttpParams(true)
})

And now in the interceptor:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  if (request.params instanceof CustomHttpParams && request.params.param1) 
    request = request.clone({
      setHeaders: {
        'header1': 'xxxxxx'
      }
    });
  else
    request = request.clone({
      setHeaders: {
        'header2': 'yyyyyy'
      }
    });

  return next.handle(request);
}
+2
source

All Articles