获取状态码 http.get 响应 angular2
Posted
技术标签:
【中文标题】获取状态码 http.get 响应 angular2【英文标题】:Get status code http.get response angular2 【发布时间】:2017-09-26 17:46:13 【问题描述】:我需要获取以下http调用的状态码,并将其作为字符串返回
//This method must return the status of the http response
confirmEmail(mailToken):Observable<String>
return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
.map(this.extractData)
.catch(this.handleError);
谢谢!
【问题讨论】:
【参考方案1】:使用替换 http
的新 HttpClient
添加 Angular >= 4.3(包括 11)版本的答案
import HttpClientModule from '@angular/common/http'; // Notice it is imported from @angular/common/http instead of @angular/http
如何获取响应代码或任何其他标头:
http.get(
`$this.baseUrlusers/activate?mailToken=$mailToken`,
observe: 'response'
)
.subscribe(response =>
// You can access status:
console.log(response.status);
// Or any other header:
console.log(response.headers.get('X-Custom-Header'));
);
正如@Rbk 的评论中所述,
对象observe: 'response'
使完整响应对象可用。
Check Documentation
【讨论】:
必须明确,要获得完整的http响应对象,选项observe:'response'
是这里的决定因素,然后你可以相应地返回完整的响应。没有observe:'response'
,你赢了'没有得到完整的响应,只有正文数据。
只需将 observe: 'response' 添加到标题【参考方案2】:
只需修改您的代码,将您的 responseStatus 存储在一个字段中:
responseStatus: number;
//This method must return the status of the http response
confirmEmail(mailToken):Observable<String>
//Edited for working with HttpClient on Angular >= 4.3
return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken, observe: 'response')
.map((response: Response) =>
this.responseStatus = response.status;
return this.extractData(response);
.catch(this.handleError);
然后在你的组件 html 模板中显示它:
<p class='responseStatus'>responseStatus</p>
【讨论】:
抱歉问题不恰当,我应该如何将它添加到我的代码中?,write a method called in the service protected extractData(response: Response) return response.statusText;
我已经有一个同名的方法:private extractData(res: Response) let body; try body = res.json(); catch (err) alert(err.message); return body || ;
所以在您的返回调用中,您返回的主体是响应对象本身,而不仅仅是 statusText ,调用者可以从中提取 statusText ....我想您不仅要返回整个响应状态文本
这样我无法解释来自组件的响应【参考方案3】:
很简单!!
在您的 extractData 函数中
extractData (res)
//res.status will be your status code
// res.statusText will be your status Text
【讨论】:
【参考方案4】:代码如下:
http.get(
'$this.baseUrlusers/activate?mailToken=$mailToken',
observe: 'response'
).subscribe(response =>
, error =>
// You can access status:
console.log(error.status);
);
以上代码调用实例的subscribe()
方法,然后在error
通知中,获取状态。
【讨论】:
【参考方案5】: confirmEmail(mailToken):Observable<String>
return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
.pipe(map(data =>
return data.httpStatus
));
.catch(this.handleError);
希望,这会解决您的问题。
【讨论】:
以上是关于获取状态码 http.get 响应 angular2的主要内容,如果未能解决你的问题,请参考以下文章
VueResource Vue.http.get 响应状态码 0
从跨域 http.get 请求的 ASP.NET Web API 2 响应中获取 Angular 中的特定响应标头(例如 Content-Disposition)