I am writing interceptors such that I don't have to handle the headers in every service calling my web api. The problem with this is that 99% of my calls require 1 specific set of headers, but the other 1% only require 1 of the headers and will not work with the others present. With this being known my idea is to make 2 interceptors, the first will add the 1 header that they all use and the second will add the rest of the headers, with the second excluding the 1%.
The following is how I am going about excluding the 1%, which works, but I want to see if there is a better way of going about this:
intercept(request: HttpRequest<any>, next:HttpHandler: Observable<HttpEvent<any>> {
  let position = request.url.indexOf('api/');
  if (position > 0){
    let destination: string = request.url.substr(position + 4);
    let matchFound: boolean = false;
    for (let address of this.addressesToUse){
      if (new RegExp(address).test(destination)){
        matchFound = true;
        break;
      }
    }
    if (!matchFound){
      ...DO WORK to add the headers
    }
  }
                Update from Angular 12, use "context", see this SO
I suggest that, in spite of check the request, you can use the header to add a "skip" property, if the header has the skip property, simple return the reqs
export class CustomInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (req.headers.get("skip"))
           return next.handle(req);
      
        ....
    }
}
And you make all the calls you need "skip" the interceptor like
this.http.get(url, {headers:{skip:"true"});
                        after checking for req.headers.get("skip") as Eliseo suggested, I'd recommend removing this header from request since it's Angular-related only and it should not be transmitted to the API (actually it can cause issues)
const skipIntercept = request.headers.has('skip');
if (skipIntercept) {
    request = request.clone({
        headers: request.headers.delete('skip')
    });
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With