每个请求都在Angular 2中自定义Http标头

时间:2017-03-09 20:31:06

标签: javascript angular typescript angular2-services angular2-http

在我的Angular 2应用程序中,我尝试使用 Http @angular/http)向我的API发出请求。为了使这些请求起作用,我需要将某些标头添加到我对API发出的每个请求中(包括JWT标头)。

我想要做的是拥有 API 类,负责创建Http请求以及一些错误处理和验证等。

但事实证明,我无法使用 API 类中的 Http 类,因为它会出现以下错误; error

user.service.ts

import { Injectable } from '@angular/core';
import {User} from "../models/User";
import {API} from "../API";
import {Http} from "@angular/http";

@Injectable()
export class UserService
{
    constructor (private http : Http) {}

    getProfile (user : User)
    {
        let api = new API (this.http);

        return api.doRequest ('/user/' + user.id + '/profile');
    }
}

API.ts

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

export class API
{
    ...

    constructor (private http : Http) {}

    doRequest (url : string, method : string, data?)
    {
        let headers = {...};
        let options = new RequestOptions ({ headers: new Headers (headers), ... } );

        return this.http.get (url, data, options)
            .catch ((error) => { ... } );
    }
}

然而,直接从 UserService 使用 Http 时,事情会更好。

有没有办法解决这个问题,或者更好的方法来达到预期效果?我应该只扩展 Http 吗?

2 个答案:

答案 0 :(得分:1)

您应该使用 append()方法添加标头,然后将其传递给请求对象,如下所示

 doRequest (url : string, method : string, data?)
    {
        headers= new Headers();
        headers.append(name1,value1);
        headers.append(name2,value2);
        ....
        let options = new RequestOptions ({ headers: headers, ... } );

        return this.http.get (url, data, options)
            .catch ((error) => { ... } );
    }

答案 1 :(得分:0)

这就是今天设置HTTP标头的方式(Angular> 4):

导入:

import {HttpClient, HttpHeaders} from '@angular/common/http';

和用法:

const headers = new HttpHeaders()
    .set("X-CustomHeader", "custom header value");

请注意,我们通过链接连续的set()方法来构建头对象。这是因为HttpHeaders是不可变的,它的API方法不会导致对象变异。

相反,对set的调用将返回一个包含新值属性的新HttpHeaders对象。所以这意味着以下将不起作用

const headers = new HttpHeaders ();
headers.set("X-CustomHeader", "custom header value")