2017-06-24 58 views
5

için üstbilgileri içermiyor Çok basit açısal 4 http isteği deniyorum. Krom geliştirici araçlarını kontrol ettiğimde, http başlıklarını göremedim.Açısal 4, http isteği

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(); 

Bir şey mi eksik?

+0

çek [bu] (https://stackoverflow.com/a/41133924/2545680) –

+0

@Maximus sadece denenmiş ve işe yaramaz. :/ –

+0

Cevabımda bir örnek verdim, sadece kontrol ettim, benim için çalışıyor, Angular v4.x kullanıyorum –

cevap

13

[email protected] ile başlayan @angular/http modülü tüm sınıfları ile kullanımdan kaldırılmıştır. Şimdi angular/common/http kullanılmalıdır. Daha fazla bilgi için Read here.

Böyle yapabilirsiniz:

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(); 

Sen @angular/http doğru nesneleri içe aktardığınız sağlamak zorunda:

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

hala görmüyorsanız senin üstbilgiler, kullandığınız sunucunun bunlara izin vermemesi de mümkündür. Bir tarayıcı diğer menşe bir istekte bulunduğunda, sunucunun özel üstbilgiye izin verip vermediğini kontrol etmek için access-control-headers-request başlığını gönderir. Sunucunuz özel başlıklara izin verecek şekilde yapılandırılmamışsa, bunları sonuç isteklerinde görmezsiniz.

+1

[Başlıklardaki Dokümanlar] 'a (https://angular.io/api/http/Headers) Göre sınıf reddedilir ve [class * HttpHeaders *] 'ı kullanması önerilir (https://angular.io/api/common/http/HttpHeaders). Yine de çalışmamı sağlayamam (yine de çok cahil olduğum sözdizimiyle ilgili bir şey). Eğer cevabınızı eski moda olmayan bir sınıfla güncellemek istiyorsanız, bu çok takdir edilecektir. – DonkeyBanana

+0

@DonkeyBanana, evet, '@ köşeli/http' modülü tüm sınıfları ile kullanımdan kaldırılmıştır. Şimdi '@ köşeli/ortak/http' kullanılmalıdır. Cevabı ekleyeceğim. Teşekkürler –

0

bu

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

koyun ve yöntemin içinde bu

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

kullanırsanız HttpClient yerine Http kodunuzu gerektiği gibi görünür: sizin parametreler isteğe bağlıysa

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 
     } 
    ); 
} 

aşağıdaki gibi params eklemelisiniz:

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

Kaynak kodu gibi görünüyor:

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