在我的Angular 2应用程序中,我尝试使用 Http (@angular/http
)向我的API发出请求。为了使这些请求起作用,我需要将某些标头添加到我对API发出的每个请求中(包括JWT标头)。
我想要做的是拥有 API 类,负责创建Http请求以及一些错误处理和验证等。
但事实证明,我无法使用 API 类中的 Http 类,因为它会出现以下错误;
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');
}
}
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 吗?
答案 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")