繁体   English   中英

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

[英]Angular 6 get request custom param in http interceptor

我正在尝试从拦截器中的 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 请求中设置的值。

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

let show = req.params.get.showErrorMessage;

或者

let show = req.params.get.['showErrorMessage'];

你可以console.log(req.params)看看你有什么。 让我知道

对于偶然发现相同问题的任何人,我们可以在 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')

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

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

你应该做的

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

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

PS我知道这是一个老问题,但我在这个问题上浪费了一个小时试图证明我没有疯,现在搜索让我找到了这个问题,但仍然没有答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM