簡體   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