在Angular 4 HttpClient中,如何接收状态代码?
要获取数据,我正在执行以下操作:在Angular 4 HttpClient中,如何接收状态代码?,angular,angular-httpclient,Angular,Angular Httpclient,要获取数据,我正在执行以下操作: data = this.http.get(url, httpOptions); 但这只是返回身体。我需要完整的回复才能得到状态。我知道这个语法: data = this.http.get(url, {observe: 'response'}); 但这将取代我的httpoptions,这将使我未经身份验证。我不能像在POST中那样在GET上添加另一个参数。请帮忙 使用此代码获取状态 更新于[15/02/19]: getOptions={ 标题:新的HttpH
data = this.http.get(url, httpOptions);
但这只是返回身体。我需要完整的回复才能得到状态。我知道这个语法:
data = this.http.get(url, {observe: 'response'});
但这将取代我的
httpoptions
,这将使我未经身份验证。我不能像在POST
中那样在GET
上添加另一个参数。请帮忙 使用此代码获取状态
更新于[15/02/19]:
getOptions={
标题:新的HttpHeaders({
“内容类型”:“应用程序/json;字符集=UTF-8”,
“authToken”:this.token//包含authToken作为请求头中的参数
//用于授权的http.get方法。
})
};
//用于获取请求的整个响应,包括状态代码等。
getOptions['observe']='response';
返回此.http.get(url,getOptions)
.烟斗(
catchError(this.handleError)
)
.订阅(res=>{
控制台日志(res);
},
err=>{console.log(err)});
以上更新的代码将给出整个响应使用此代码获取状态 更新于[15/02/19]:
getOptions={
标题:新的HttpHeaders({
“内容类型”:“应用程序/json;字符集=UTF-8”,
“authToken”:this.token//包含authToken作为请求头中的参数
//用于授权的http.get方法。
})
};
//用于获取请求的整个响应,包括状态代码等。
getOptions['observe']='response';
返回此.http.get(url,getOptions)
.烟斗(
catchError(this.handleError)
)
.订阅(res=>{
控制台日志(res);
},
err=>{console.log(err)});
上面更新的代码将导致给出整个响应无法将第三个参数添加到http.get中的原因是它不接受第三个参数。
observe
“syntax”是httpOptions
参数的一部分,因此您只需将httpOptions
对象中的内容与{observe:“response”}
例如,如果您的httpOptions
如下所示:
const httpOptions = {
headers: {
"Content-Type": "application/json"
}
}
您可以将其与上面的观察对象组合,如下所示:
const httpOptions = {
headers: {
"Content-Type": "application/json"
},
observe: "response"
}
如果您接受httpOptions
作为参数(因此您不能像上一个示例中那样从头创建一个新参数),您可以直接在其上写入observe
字段:
httpOptions.observe = "response"
这两种方法都将保留当前的httpOptions
对象,并向其添加observe:“response”
字段
编辑
要使此方法起作用,您需要向编译器“撒谎”了解的类型以允许其编译。您可以通过在httpOptions
对象中的“response”
末尾添加作为任何
来完成此操作:
const httpOptions = {
headers: {
"Content-Type": "application/json"
},
observe: "response" as any
}
之所以需要这样做,是因为TypeScript无法正确推断原始httpOptions
对象的类型(它希望“response”
是文本“body”
)。告诉TypeScript将“response”
解释为任何,可以解决此问题。无法向http.get添加第三个参数的原因是它不接受第三个参数。observe
“syntax”是httpOptions
参数的一部分,因此您只需将httpOptions
对象中的内容与{observe:“response”}
例如,如果您的httpOptions
如下所示:
const httpOptions = {
headers: {
"Content-Type": "application/json"
}
}
您可以将其与上面的观察对象组合,如下所示:
const httpOptions = {
headers: {
"Content-Type": "application/json"
},
observe: "response"
}
如果您接受httpOptions
作为参数(因此您不能像上一个示例中那样从头创建一个新参数),您可以直接在其上写入observe
字段:
httpOptions.observe = "response"
这两种方法都将保留当前的httpOptions
对象,并向其添加observe:“response”
字段
编辑
要使此方法起作用,您需要向编译器“撒谎”了解的类型以允许其编译。您可以通过在httpOptions
对象中的“response”
末尾添加作为任何
来完成此操作:
const httpOptions = {
headers: {
"Content-Type": "application/json"
},
observe: "response" as any
}
之所以需要这样做,是因为TypeScript无法正确推断原始httpOptions
对象的类型(它希望“response”
是文本“body”
)。告诉TypeScript将“response”
解释为任何都可以解决这个问题。也许这可以帮助你,@DanyParedes谢谢,但我已经读过了。他们没有提到我需要发送身份验证头的情况。可能是@rickz Not的重复。StackOverflow中的所有答案都没有说明HttpClieht的http.get
也会使用身份验证参数这一事实。即使是官方文件也没有这个案例,至少到目前为止我读过。请告诉我们你是如何发送身份验证的。也许这可以帮助你,@DanyParedes谢谢,但我已经读过了。他们没有提到我需要发送身份验证头的情况。可能是@rickz Not的重复。StackOverflow中的所有答案都没有说明HttpClieht的http.get
也会使用身份验证参数这一事实。即使是官方文档也没有这个案例,至少到目前为止我还没有读到。请告诉我们您是如何发送身份验证的。谢谢,但我尝试了这个,但没有成功。首先,我也不能为标题使用普通对象。它必须是headers:new-HttpHeaders({'Content-Type':'application/json'})
,如果我将observe:“response”
放在它下面,就像const-httpOptions={headers:new-HttpHeaders一样({