2015-12-28 16 views
6

Tôi muốn đặt tiêu đề Content-type: application/json trong tất cả các yêu cầu của tôi vào chương trình phụ trợ của tôi trong Angular2. Tôi sử dụng điều này trong tệp app.js chính của mình.Làm cách nào để bạn đặt tiêu đề tùy chỉnh chung trong Angular2?

let headers = new Headers({ 
    'Content-Type', 'application/json' 
}) 
class MyOptions extends BaseRequestOptions { 
    headers: headers 
} 

bootstrap(App, [ 
    provide(RequestOptions, {useClass: MyOptions}), 
    ROUTER_BINDINGS, 
    HTTP_PROVIDERS, 
    bind(APP_BASE_HREF).toValue('/') 
]) 

tôi hy vọng tất cả các công dụng của Http sử dụng mới content-type, nhưng mã này vẫn có content-type thiết lập để text/plain

saveMaster (master) { 
    return this.http 
    .put(`${config.API_URL}/masters/${master._id}`, JSON.stringify(master)) 
    .map(res => res.json()) 
} 

Tôi đã tự đặt tiêu đề cho mỗi yêu cầu để làm cho nó hoạt động chính xác. Tôi có làm điều gì sai?

Lưu ý: Tôi muốn đặt tùy chọn tiêu đề trên toàn cầu, không phải đặt tùy chọn này theo mọi loại yêu cầu như được tìm thấy trong this solution.

+2

có thể trùng lặp của [Angular2 - bộ tiêu đề cho mọi yêu cầu] (http://stackoverflow.com/questions/34464108/angular2-set-headers-for-every-request) –

+0

@MarkRajcok Câu trả lời đó vẫn đặt tiêu đề tùy chỉnh cho mọi loại yêu cầu theo cách thủ công. Tôi sẽ thử giải pháp alexpods vào ngày mai. –

Trả lời

8
  1. Thay đổi MyOptions tới:
class MyOptions extends RequestOptions { 
    constructor() { 
    super({ 
     method: RequestMethod.Get, 
     headers: new Headers({ 
     'Content-Type': 'application/json', 
     'X-Some-Header': 'some-content' 
     }); 
    }); 
    } 
} 
  1. Đặt provide(RequestOptions, {useClass: MyOptions})SAUHTTP_PROVIDERS (nếu không mặc BaseRequestOptions sẽ được sử dụng thay vì MyOptions của bạn).
bootstrap(App, [ 
    // ... 
    HTTP_PROVIDERS, 
    provide(RequestOptions, {useClass: MyOptions}) // <- after HTTP_PROVIDERS!!! 
]) 

Xem this plunk

+0

Tác phẩm này độc đáo. Đáng buồn thay, điều này không hoạt động với tiêu đề động (ví dụ: tiêu đề phụ thuộc vào cookie có thể thay đổi). Hàm khởi tạo sẽ chỉ được đánh giá một lần khi tải. – astreal

+0

Đối với tiêu đề động, bạn có thể mở rộng lớp http và sửa đổi phương thức 'request' để thêm tiêu đề tùy chỉnh cho mọi yêu cầu. Tôi đã viết một hướng dẫn toàn diện về điều này - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ –

Các vấn đề liên quan