问题
I need to get the status code of the following http call and return it as a string
//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);
}
thx!
回答1:
Adding answer for versions of Angular >= 4.3 (including 9) with new HttpClient
that replaces http
import {HttpClientModule} from '@angular/common/http'; // Notice it is imported from @angular/common/http instead of @angular/http
How to get response code or any other header:
http.get(
`${this.baseUrl}users/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'));
});
As noted in the comment by @Rbk,
The object {observe: 'response'}
is what makes the full response object available.
Check Documentation
回答2:
Just modify your code as following to store your responseStatus in a field :
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);
}
And then display it in your component HTML template :
<p class='responseStatus'>{{responseStatus}}</p>
回答3:
This is how I did it :
checkResponse() {
this.http.get(this.url, { observe: 'response' })
.subscribe(response => console.log(response.status));
}
Using Angular 7.
回答4:
Its simple !!
Inside your extractData function
extractData (res){
//res.status will be your status code
// res.statusText will be your status Text
}
回答5:
confirmEmail(mailToken):Observable<String> {
return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
.pipe(map(data => {
return data.httpStatus
}));
.catch(this.handleError);
}
Hope, this will solve your problem.
回答6:
not Working with me
look my method in c# with aspnet core
public IActionResult Insert([FromBody]TrocoSolidarioDTO x)
{
if (x == null)
{
return BadRequest();
}
try
{
return Ok("Working");
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
回答7:
If you have query parameters and other options you need to add
{ observe: 'response', params: new HttpParams() }
to your .get, .post, .patch etc method as the second argument. Then you can access it via the callback response.status. Note if you are like me and needed to do this, put your parameter options in the same array.
create(resource: Resource, query?: Query): Observable<Resource> {
return this._httpClient
.post(`${this._apiUrl}${this._endpoint}`, this._serializer.toJson(resource), {
params: query ? new HttpParams({ fromObject: query.toOData() }) : null,
observe: 'response'
})
.map(
(response): Resource => {
this.handleStatusCode(response.status);
try {
return this._serializer.fromJson(response);
} catch (err) {
throw new Error(`Error parsing resource. Details: ${err}`);
}
}
);
}
来源:https://stackoverflow.com/questions/43683052/get-status-code-http-get-response-angular2