Angular 5中对请求参数的条件拦截器动作

问题描述 投票:0回答:3

我需要根据我的初始意图在Angular的HTTP拦截器中有条件地采取行动,然后再发送请求。这是一个简单的抽象组成:

HttpClient发出的请求完全相同(URL,参数等),两个目的:

  1. 需要显示加载程序的请求(例如页面更改,初始加载等)

    this.http.post(url, data, config = {**someCustomParam**: true});

  2. 请求不]显示一个加载程序(例如状态检查,Ping等)

    this.http.post(url, data, config = {**someCustomParam**: false});

  3. 截取请求导致诸如此类的事情:

@Injectable()
export class RequestInterceptor implements HttpInterceptor {
  constructor(private injector: Injector) { }

  public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).do((event: HttpEvent<any>) => {
      if (event instanceof HttpErrorResponse) {
      }
    }, (err: any) => {
      if(request.someCustomProperty) {
        **// Do somethnig on TRUE**
      } else {
        **// Do somethnig on FALSE**
      }
    });
  }
}

我面临的问题是,我无法在请求中传递自定义参数,并且无法在响应到达后再见面。这是到目前为止我发现的内容:

  1. [有人建议在http.get / http.post的config参数中传递任何参数-不起作用。它仅接受某些参数。
  2. 与后端协商以传递某些内容(例如标头或参数)-打破了前端的分离,因为我们变得依赖于后端;
  3. 使用装饰器/扩展HttpClient组件,因此我可以传递参数-可以,但是我正在寻找本机解决方案。
  4. 谢谢您!

在发送请求之前,我需要根据我的初衷在Angular的HTTP拦截器中有条件地采取行动。这是一个简单的抽象构成:完全相同的请求(URL,参数等)...

angular angular5 angular-httpclient angular-http-interceptors
3个回答
0
投票

不建议使用前两种方法。


0
投票

我建议您将自定义参数作为标头添加到请求中,无论如何,您都可以在拦截器中检查它并从请求中删除它。这将是最快的解决方案。


0
投票

作为一种解决方法,我编写了一个在执行http请求之前执行的代码。

© www.soinside.com 2019 - 2024. All rights reserved.