[英]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.