2017-06-24 5 views
5

Ich versuche sehr einfache eckige 4 HTTP-Anfrage. Wenn ich die Chrome-Entwickler-Tools überprüfe, konnte ich keine http-Header sehen.Angular 4 enthält keine Header zu HTTP-Anfrage

const headers: Headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 
headers.append('Authorization', 'Bearer: 123213'); 
this.http.post('https://127.0.0.1:502', JSON.stringify(token), {headers: headers}).subscribe(); 

bin ich etwas fehlt?

+0

Prüfung [diese] (https://stackoverflow.com/a/41133924/2545680) –

+0

@Maximus gerade versucht, und es funktioniert nicht. :/ –

+0

Ich habe ein Beispiel in meiner Antwort, nur überprüft, funktioniert es für mich, ich benutze Angular v4.x –

Antwort

13

Beginnend mit [email protected] ist das @angular/http Modul mit allen seinen Klassen veraltet. Jetzt sollte angular/common/http verwendet werden. Read here für mehr.

Sie können es wie folgt tun:

import {Http, Headers, RequestOptions} from '@angular/http'; 

export class AppComponent { 
    constructor(private http: Http) { 
     const headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 
     headers.append('authentication', `hello`); 

     const options = new RequestOptions({headers: headers}); 
     this.http.post(
      "http://localhost:3000/contacts", 
      JSON.stringify({id: 4, name: 'some'}), 
      options 
     ).subscribe(); 

Sie haben, um sicherzustellen, dass Sie die richtigen Objekte aus dem @angular/http importieren:

import {Http, Headers, RequestOptions} from '@angular/http'; 

Wenn Sie noch nicht sehen, Ihre Header, ist es auch möglich, dass der Server, den Sie verwenden, sie nicht erlaubt. Wenn ein Browser eine Anforderung an den anderen Ursprung sendet, sendet er access-control-headers-request Header, um zu überprüfen, ob der Server benutzerdefinierten Header zulässt. Wenn Ihr Server nicht konfiguriert ist, um benutzerdefinierte Header zuzulassen, werden diese in den Folgeanforderungen nicht angezeigt.

+1

Nach [Dokumente auf Kopfzeilen] (https://angular.io/api/http/Headers) , die Klasse ist veraltet und es wird empfohlen, die [Klasse * HttpHeaders *] (https://angular.io/api/common/http/HttpHeaders) zu verwenden. Ich kann es immer noch nicht funktionieren lassen (etwas mit der Syntax, zu der ich zu unwissend bin). Wenn Sie also Ihre Antwort mit der nicht überholten Klasse aktualisieren möchten, würde es sehr geschätzt werden. – DonkeyBanana

+0

@DonkeyBanana, ja, das '@ eckige/http'-Modul ist mit allen seinen Klassen veraltet. Jetzt sollte '@ angular/common/http' verwendet werden. Ich füge die Antwort hinzu. Vielen Dank –

0

Diesen

constructor(private http: Http) { 
      this.headers = new Headers(); 
      this.headers.append('content-type', 'application/json'); 
    } 

und innerhalb der Methode dieses

return this.http.post(url, jsonData, this.headers).map((resp: Response) => resp.json()); 
9

Wenn Sie Httpclient stattdessen Http Der Code sollte wie folgt aussieht:

login(credintials: Authenticate): Observable<any> { 

    const body = { 
     username: credintials.username, 
     password: credintials.password, 
     grant_type: 'password', 
     client_id: credintials.client_id 
    }; 
    const headers = new HttpHeaders() 
     .set('Content-Type', 'application/x-www-form-urlencoded') 
     .set('Authorization', 'Basic loremlorem'); 

    return this.http.post(`${baseUrl}/uaa/oauth/token`, 
     body, 
     { 
      headers: headers 
     } 
    ); 
} 

Wenn Ihr params ist optional Sie sollten folgende Parameter hinzufügen:

let params: HttpParams = new HttpParams(); 
if (param) { 
    params = params.append('page', param.page); 
} 

Quellcode wie folgt aussieht:

/** 
* Construct a new body with an appended value for the given parameter name. 
*/ 
append(param: string, value: string): HttpParams;