Angular 6在HTTP拦截器中获取请求自定义参数

时间:2019-04-05 09:30:50

标签: angular http rxjs

我正在尝试从拦截器中的http请求中检索自定义参数。我需要显示还是不显示错误消息。 我以这种方式设置自定义参数:

getTickets(): Observable<Ticket> {
    var params = new HttpParams();
    params.append('showErrorMessage', 'false'); 
    return this.http.get(Conf.BaseUrl + 'tickets', { params: params });
}

然后我尝试在拦截器中获取参数:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
        tap(
            (event: HttpEvent<any>) => {
               let show = req.params.get('showErrorMessage');
               ...
            }
         )
    )
}

在req.params中没有我的自定义参数,因此我认为这不是设置和获取请求参数的正确方法。 有什么建议么? 谢谢

编辑: 为避免混淆,我更改了问题,希望更清楚。 我应该设置一个调用服务方法的参数,并使拦截器能够获取此参数。有没有办法做到这一点?是否可以在http请求期间将参数从服务“传递”到拦截器? 我尝试使用HttpHeaders和HttpParams,但是它不起作用。

已解决 我找到了解决方案。我不知道原因,但是将params变量用作HttpParams无效。而是以这种方式起作用:

getTickets(): Observable<Ticket> {
    return this.http.get(Conf.BaseUrl + 'tickets', {
        headers: {
            showErrorMessage: 'false'
        });
}

和拦截器中

...
    tap(
        (event: HttpEvent<any>) => {
            let show = req.headers.get('showErrorMessage');
               ...
        }
    )
...

我得到了http请求中设置的值。

3 个答案:

答案 0 :(得分:1)

实际上,您可以通过直接调用来获取它

1200x480

let show = req.params.get.showErrorMessage;

您可以let show = req.params.get.['showErrorMessage']; 来查看其中的内容。让我知道

答案 1 :(得分:1)

对于偶然发现相同问题的任何人,我们可以在 HttpParams 中传递自定义参数。但是我们必须记住 HttpParams 是一个不可变对象。对于不可变对象,每次调用 params.append() 都会返回一个新对象。因此,我们必须将返回的新对象重新分配回 params,如下所示,

getTickets(): Observable<Ticket> {
    var params = new HttpParams();
    // Notice that I am re-assigning the params object
    params = params.append('showErrorMessage', 'false'); 
    return this.http.get(Conf.BaseUrl + 'tickets', { params: params });
}

在拦截器中,我们可以这样访问值

req.params.get('showErrorMessage')

答案 2 :(得分:0)

您的代码看起来不错。这不起作用,因为HttpParamsimmutable,并且您丢失了append()的结果。所以代替

params.append('showErrorMessage', 'false');

你应该做的

params = params.append('showErrorMessage', 'false');

或一行var params = new HttpParams().append('showErrorMessage', 'false');

P.S。我知道这是一个古老的问题,但是我为此花了一个小时,试图证明自己没有精神病,现在搜索让我对这个问题仍然没有答案。