Tengo una aplicación angular con un HttpInterceptor que detecta los errores de http para mostrar algún cuadro de diálogo, común a toda mi aplicación.
Me gustaría deshabilitar el interceptor para algunas llamadas específicas, pero prefiero deshabilitar el comportamiento predeterminado donde llamo a http, en lugar de escribir una excepción en el interceptor. ¿Alguien ha encontrado este problema?
Puedo ser más específico con un ejemplo, si es necesario.
Saludos
david
Puede usar HttpBackend para hacer esto.
Descripción: cuando se inyecta, HttpBackend envía las solicitudes directamente al backend, sin pasar por la cadena de interceptores.
Usando: puede usar lo mismo que HttpClient importándolo desde @angular/common/http
Ejemplo:
import { HttpClient, HttpBackend } from '@angular/common/http'; ... @Injectable({ providedIn: 'root' }) export class HttpHelperService { private httpClient: HttpClient; constructor( httpBackend: HttpBackend) { this.httpClient = new HttpClient(httpBackend); } // use like normal with HttpClient. However, should name it carefully to separate which http request go throught interceptor and which is not put(path: string, body: Object = {}): Observable<any> { return this.httpClient.put( `${this.URL}${path}`, JSON.stringify(body) ).pipe(catchError(this.formatErrors)); } ....referencia: https://angular.io/api/common/http/HttpBackend
Con Angular 12 , ahora es posible incluir algunos metadatos (con HttpContext ) en su llamada que se pueden usar dentro del interceptor para tomar decisiones (o cualquier cosa que realmente desee).
Ejemplo
Su interceptor:
export const BYPASS_LOG = new HttpContextToken(() => false); export class MyLogInterceptor implements HttpInterceptor { intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { if (req.context.get(BYPASS_LOG) === true) return next.handle(req); console.log(`req to ${req.url}`); return next.handle(req); } }Tu servicio:
httpClient.get('https://example.com/', { context: new HttpContext().set(BYPASS_LOG, true) });Puede consultar documentos angulares para obtener más información: