2017-08-07 21 views
9

पर एकाधिक शीर्षलेख सेट करें मैंने अभी देखा है कि Header Object जो पिछले HTTP अनुरोधों में उपयोग करना संभव था, अब नए इंटरसेप्टर में समर्थित नहीं है।इंटरसेप्टर कोणीय 4.3 - क्लोन अनुरोध

यह new Interceptor तर्क है:

उदाहरण::

headers?: HttpHeaders; 

    headers: req.headers.set('token1', 'asd') 

setHeaders?: { 
    [name: string]: string | string[]; 
}; 

    setHeaders: { 
      'token1': 'asd', 
      'token2': 'lol' 
    } 

// Get the auth header from the service. 
const authHeader = this.auth.getAuthorizationHeader(); 
// Clone the request to add the new header. 
const authReq = req.clone({headers: req.headers.set('Authorization', authHeader)}); 

मैं, अब दो इस अनुरोध में मेरी हेडर जोड़ने के लिए तरीके हैं मैं उसे कितना जोड़ सकता हूं इस अनुरोध पर सशर्त विज्ञापनदाता? क्या मैं हैडर वस्तु के साथ क्या करने के लिए इस्तेमाल करने के लिए एक ही:

myLovellyHeaders(headers: Headers) { 
    headers.set('token1', 'asd'); 
    headers.set('token2', 'lol'); 
    if (localStorage.getItem('token1')) { 
    headers.set('token3', 'gosh'); 
    } 
    } 
    const headers = new Headers(); 
    this.myLovellyHeaders(headers); 

उत्तर

5

नया HTTP ग्राहक काम करता है अपरिवर्तनीय हेडर के साथ आपत्ति है। आप वस्तु उत्परिवर्तित करने के लिए पिछले हेडर के लिए एक संदर्भ स्टोर करने के लिए की जरूरत है:

myLovellyHeaders(headers: Headers) { 
    let p = headers.set('token1', 'asd'); 
    p = p.set('token2', 'lol'); 
    if (localStorage.getItem('token1')) { 
     p = p.set('token3', 'gosh'); 
    } 

Why HttpParams doesn't work in multiple line in angular 4.3 देखें समझने के लिए तुम क्यों दिए गए मान के संदर्भ में स्टोर करने के लिए की जरूरत है।

यह हेडर के लिए एक ही बात है:

export class HttpHeaders { 
    ... 
    set(name: string, value: string|string[]): HttpHeaders { 
    return this.clone({name, value, op: 's'}); 
    } 

    private clone(update: Update): HttpHeaders { 
    const clone = new HttpHeaders(); 
    clone.lazyInit = 
     (!!this.lazyInit && this.lazyInit instanceof HttpHeaders) ? this.lazyInit : this; 
    clone.lazyUpdate = (this.lazyUpdate || []).concat([update]); 
    return clone; 
    } 

इंटरसेप्टर के पीछे यांत्रिकी के बारे में अधिक जानने के लिए पढ़ें:

5

कोणीय 4.3+

इंटरसेप्टर में स्थापित बहु हेडर:

import { 
    HttpEvent, 
    HttpInterceptor, 
    HttpHandler, 
    HttpRequest, 
    HttpHeaders 
} from '@angular/common/http'; 
import {Observable} from 'rxjs/Observable'; 

import {environment} from '../../../../environments/environment'; 

export class SetHeaderInterceptor implements HttpInterceptor { 
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 

    const headers = new HttpHeaders({ 
     'Authorization': 'token 123', 
     'WEB-API-key': environment.webApiKey, 
     'Content-Type': 'application/json' 
    }); 


    const cloneReq = req.clone({headers}); 

    return next.handle(cloneReq); 
    } 
} 
1

मेरे कोड निम्नलिखित दृष्टिकोण के साथ काम किया कई हेडर संलग्न करने के लिए:

headers: req.headers.set('token1', 'asd') 
.set('content_type', 'asd') 
.set('accept', 'asd') 
संबंधित मुद्दे