Angular2-HTTP RequestOptions头


73

我目前在tslint上遇到问题,希望有人可以指出正确的方向。

我正在尝试使用Angular2框架提供的HTTP发送HTTP GET请求。对于此请求,我必须指定内容类型和承载身份验证令牌。

我的代码示例:

let headers = new Headers();
let authToken = this._user.getUser().JWT;
headers.append('Content-Type', 'application/json');
headers.append('Authorization', `Bearer ${authToken}`);
let options = new RequestOptions({ headers: headers });

this._http.get('http://' + url '/', options)
            .timeout(3000)
            .subscribe(
                (res) => {

这有效,但是,tslint抱怨

“ TS2345:类型'{headers:Headers;}'的参数不能分配给类型'RequestOptionsArgs'的参数。属性'headers'的类型不兼容。类型'Headers'不能分配给类型'Headers'。两种不同的类型具有此名称的名称,但它们不相关。“标题”类型中缺少属性“关键字”。”

感谢您的支持。


考虑使用const代替let同时使用选项和标头
Amin

Answers:


201

更新资料

截止到今天,@angular/http不推荐使用,而@angular/common/http应该使用。因此,使用HTTP标头的最佳方法是导入import { HttpHeaders } from '@angular/common/http';documentation)。

旧答案

Headers您应该导入的类型是import { Headers } from '@angular/http';

检查您的进口


3
就是这样!我使用的是Phpstorm,通常效果很好,可以清楚地向我显示我错过了依赖项,但是这次没有。此外,我还不太清楚tslint消息。干杯:)
Zander17年

3
即使不导入,总会有某种Headers类。因此,您必须确保导入正确的一个(请参阅上面的答案)以使其正常工作。
GoTo

3
对于Angular 5,这对我import { Headers, RequestOptions } from '@angular/http'; 很有帮助。文档
Abhi

@Abhi它说,在文档是已被废弃,我们应该使用HttpHeaders@角/普通/ HTTP来代替。但这真的不起作用...有想法吗?
DonkeyBanana

@DonkeyBanana我认为是一个不错的参考
Abhi

9

您必须通过以下方式更新标题:

let headers =  {headers: new  HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded'})};


2

//内容类型Json的标头示例

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

const Url = 'http://localhost:3000/';
const headers = new Headers;
const body = JSON.stringify({
title: "data" 
});
headers.append('Content-Type', 'application/json');
this.http.post(Url, body, { headers: headers })
.pipe(map((res => res)));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.