我已经创建了HTTP_INTERCEPTOR,我需要它在某些特定的路由上工作,而另一些则不能。
一开始它在主应用模块文件中, 然后我从那里删除了它,并将其添加到某些模块中,但是它仍然可以在所有路由上使用,然后我将其添加到component.ts中,但根本不起作用。
{
provide: HTTP_INTERCEPTORS,
useClass: AuthExpiredInterceptor,
multi: true,
deps: [Injector]
},
答案 0 :(得分:3)
不可能仅为某些路由和/或模块指定拦截器。
但是,您可以添加一个http标头值,该值将跳过对该请求应用拦截器。例如:
import { HttpHeaders } from '@angular/common/http';
export const InterceptorSkip = 'X-Skip-Interceptor';
export const InterceptorSkipHeader = new HttpHeaders({
'X-Skip-Interceptor': ''
});
然后在我的错误处理程序拦截器中,如果应用了标头,则不要捕获错误并进行处理,而应将其冒泡到我的服务和组件中。
@Injectable()
export class ErrorHandlerInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>,next: HttpHandler
): Observable<HttpEvent<any>> {
if (request.headers && request.headers.has(InterceptorSkip)) {
const headers = request.headers.delete(InterceptorSkip);
return next.handle(request.clone({ headers }));
}
return next.handle(request).pipe(catchError(this.processError));
}
...
}
然后,只要您有HTTP请求,就想将其忽略即可,将InterceptorSkipHeader
添加到请求中
this.http.get<ResponseModel>('api/url', { headers : InterceptorSkipHeader });