2017-06-24 29 views
5

Tôi đang cố gắng rất đơn giản góc 4 yêu cầu http. Khi tôi kiểm tra các công cụ dành cho nhà phát triển Chrome, tôi không thể thấy tiêu đề http.Góc 4 không bao gồm tiêu đề để yêu cầu http

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

Tôi đang thiếu cái gì?

+0

séc [này] (https://stackoverflow.com/a/41133924/2545680) –

+0

@Maximus chỉ cố gắng và nó không hoạt động. :/ –

+0

Tôi cung cấp một ví dụ trong câu trả lời của tôi, chỉ cần kiểm tra, nó hoạt động cho tôi, tôi đang sử dụng Angular v4.x –

Trả lời

13

Bắt đầu với [email protected] mô-đun @angular/http không được chấp nhận với tất cả các lớp của nó. Bây giờ angular/common/http nên được sử dụng. Read here để biết thêm.

Bạn có thể làm điều đó như thế này:

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

Bạn phải đảm bảo rằng bạn đang nhập đúng đối tượng từ @angular/http:

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

Nếu bạn vẫn không thấy bạn tiêu đề, cũng có thể máy chủ bạn đang sử dụng không cho phép chúng. Khi trình duyệt gửi yêu cầu đến nguồn gốc khác, nó sẽ gửi tiêu đề access-control-headers-request để kiểm tra xem máy chủ có cho phép tiêu đề tùy chỉnh hay không. Nếu máy chủ của bạn không được định cấu hình để cho phép tiêu đề tùy chỉnh, bạn sẽ không thấy chúng trong các yêu cầu hậu quả.

+1

Theo [docs on Headers] (https://angular.io/api/http/Headers) , lớp này không được dùng nữa và nó được đề nghị sử dụng [lớp * HttpHeaders *] (https://angular.io/api/common/http/HttpHeaders). Tôi vẫn không thể làm cho nó làm việc, mặc dù (một cái gì đó với cú pháp mà tôi quá dốt nát về) vì vậy nếu bạn muốn cập nhật câu trả lời của bạn với lớp không lỗi thời, nó sẽ được đánh giá cao. – DonkeyBanana

+0

@DonkeyBanana, vâng, mô-đun '@ góc/http' bị phản đối với tất cả các lớp của nó. Bây giờ '@ angular/common/http' nên được sử dụng. Tôi sẽ thêm vào câu trả lời. Cảm ơn –

0

Đặt này

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

và bên trong phương pháp này

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

Nếu bạn sử dụng HttpClient thay Http mã của bạn nên trông như thế này:

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

Nếu params của bạn là không bắt buộc bạn nên thêm thông số như sau:

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

Source code trông giống như:

/** 
* Construct a new body with an appended value for the given parameter name. 
*/ 
append(param: string, value: string): HttpParams; 
Các vấn đề liên quan