[英]Can't get request headers values from Angular HTTP interceptor
在 Angular 應用程序中,我使用攔截器將令牌(在需要時)注入到請求標頭中。 我還需要它將Content-Type
標頭修改為適當的標頭。 默認情況下,它必須是application/json
,但是有一個調用需要上傳一個 ZIP 文件,所以我想讓Content-Type
標頭保持原樣(對於這些情況,它類似於: Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvamnUWepE840OEuq
)。 我使用這個代碼:
intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let usr = this.userService.getActualUser();
let confirmationToken = '';
let credentials = false;
let contentType = 'application/json';
// Check if the incoming request has an specific content type header
if (req.headers.has('Content-Type')) {
contentType = req.headers.get('Content-Type');
}
// ETC
}
問題是req.headers.has('Content-Type')
總是返回false
,所以我設置了錯誤的類型並且調用失敗。 我究竟做錯了什么?
提前致謝!
我相信您的表單內容是 FormData 對象的一個實例? 如果是這樣的話,
if(req.body instanceof FormData)
如果您無法訪問標題,此檢查可能會幫助您或給您一些提示。 或者,您甚至可以更深入地檢查req.body
對象以進行更具體的檢查。
在您的請求期間,您希望看到content-type
但除非您直接指定它,否則您不會看到。
如果您有此要求,您將看到內容類型。
return this.http.get(this.ENDPOINT, {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
})
然而,這可能是一種矯枉過正。
另一種可能的解決方案是檢查正文的實例類型,然后相應地設置標題
if (req.body instanceof FormData) {
contentType = 'multipart/form-data';
}
按照您的建議,我想出了一個非常簡單的解決方案,即保留Content-Type
標頭,就好像請求正文是表單數據一樣,其余的設置為 JSON。 就像是:
if(!(req.body instanceof FormData)) {
contentType = 'application/json';
}
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.