В моем приложении Angular 6 я установил перехватчик, потому что мне нужно перенаправить вызовы API, которые идут в другой домен.
Часть этого - создание нового URI.
Вот код перехватчика.
import { Injectable } from "@angular/core";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpClient }
from "@angular/common/http";
import { Observable } from "rxjs/Rx";
@Injectable()
export class Interceptor implements HttpInterceptor {
constructor(private http: HttpClient){}
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
// Clone the request to add the new header.
const authReq = req.clone({ headers: req.headers.set("headerName",
"headerValue")});
if(authReq.url.search('MS/')!=1){
var url = 'api/RequestHandler/?uri=' + authReq.urlWithParams;
this.http.get(url).subscribe(
success =>{
console.log("Succefully completed");
}
)
console.log("Sending request with new header now ...");
//send the newly created request
return next.handle(authReq)
.catch((error, caught) => {
//intercept the respons error and displace it to the console
console.log("Error Occurred");
console.log(error);
//return the error to the method that called it
return Observable.throw(error);
}) as any;
}
}
}
То, что я вижу, - это код перехватчика, выполняемый сотни раз, и каждый раз, когда происходит конкатенация URI, у меня появляются сотни запросов, которые выглядят следующим образом.
http://localhost/mywebapplication/api/RequestHandler/?
uri=api/RequestHandler/?uri=api/RequestHandler/?
uri=MS/MappingServicesWebAPIIntegrated/api/myApicontroller?
Year=2018
при каждом последующем вызове добавляется дополнительный "?
= URI апи / RequestHandler / "
и только 1 правильный вызов "http://localhost/mywebapplication/api/RequestHandler/?
= URI МС / MappingServicesWebAPIIntegrated / API / myApicontroller?
Год = 2018"
Как мне остановить повторяющиеся вызовы, которые перехватчик получает и создает неправильные URL-адреса?