HTTP_INTERCEPTOR 用于 Angular 中的特定路线 4+
HTTP_INTERCEPTOR for specific routes in Angular 4+
我已经创建了 HTTP_INTERCEPTOR,我需要它在某些特定路线上工作,而其他一些则不需要。
一开始是在主应用模块文件中,
然后我从那里删除它并将它添加到一些模块中,但它仍然适用于所有路线,然后我将它添加到 component.ts 但根本不起作用。
{
provide: HTTP_INTERCEPTORS,
useClass: AuthExpiredInterceptor,
multi: true,
deps: [Injector]
},
不可能只为某些路由 and/or 模块指定拦截器。
但是,您可以添加一个 http header 值,跳过为该请求应用拦截器。例如:
import { HttpHeaders } from '@angular/common/http';
export const InterceptorSkip = 'X-Skip-Interceptor';
export const InterceptorSkipHeader = new HttpHeaders({
'X-Skip-Interceptor': ''
});
然后在我的错误处理程序拦截器中,如果应用了 header,不要捕获错误并处理它,而是让它冒泡到我的服务和组件。
@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 });
我已经创建了 HTTP_INTERCEPTOR,我需要它在某些特定路线上工作,而其他一些则不需要。
一开始是在主应用模块文件中, 然后我从那里删除它并将它添加到一些模块中,但它仍然适用于所有路线,然后我将它添加到 component.ts 但根本不起作用。
{
provide: HTTP_INTERCEPTORS,
useClass: AuthExpiredInterceptor,
multi: true,
deps: [Injector]
},
不可能只为某些路由 and/or 模块指定拦截器。
但是,您可以添加一个 http header 值,跳过为该请求应用拦截器。例如:
import { HttpHeaders } from '@angular/common/http';
export const InterceptorSkip = 'X-Skip-Interceptor';
export const InterceptorSkipHeader = new HttpHeaders({
'X-Skip-Interceptor': ''
});
然后在我的错误处理程序拦截器中,如果应用了 header,不要捕获错误并处理它,而是让它冒泡到我的服务和组件。
@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 });