Lorsque j'ai essayé d'appeler une API en utilisant HttpClient qui renvoie une chaîne, erreur de la méthode d'abonnement le gestionnaire a été appelé.
Code frontal:
[HttpGet]
public string GetName()
{
return "Sample Account Name";
}
Code backend dans le contrôleur:
this.httpClient.get<string>(`${this.baseUrl}/account/getname`).subscribe(
(accountName)=> console.log(accountName),
() => console.log("Failure")
);
Le code frontal enregistrera " Failure " sur la console.
Si la méthode de notification d'erreur est supprimée de subscribe () , l'erreur suivante se produit
TypeError non intercepté: impossible de lire la propriété 'ngOriginalError' de indéfini à getOriginalError
3 Réponses :
TypeError non intercepté: impossible de lire la propriété 'ngOriginalError' d'undefined à getOriginalError
Cela se produit parce que la réponse du côté serveur est une erreur et qu'il n'y a pas de gestionnaire d'erreur. Je suppose que la solution est toujours de gérer l'erreur lors de la demande http par
HttpClient:import { catchError } from 'rxjs/operators'; makeHttpRequest(url): Observable<any> { return this.httpClient.get(url) .pipe( catchError(err => console.log(err)) ); } makeHttpRequest(`${this.baseUrl}/account/getname`).subscribe( (accountName) => console.log(accountName); );
oui, c'est correct. Mais la raison de l'erreur ne spécifiait pas le type de réponse du client http
Étant donné que le type de réponse par défaut de HttpClient est JSON , il s'attendait à ce que l'objet de réponse soit une valeur json.
Mais notre réponse était une chaîne . C'était la raison de l'erreur.
Lorsqu'une API renvoie des données non JSON, nous devons la spécifier à l'aide de l'option responseType dans la requête get .
Il existe différentes options telles que ' blob ', ' text ', ' arraybuffer ', ' json '
Pour le cas ci-dessus, si nous ne spécifions pas le préamètre de type d'appel get sous forme de chaîne ( get ), nous devons simplement définir responseType comme {responseType: 'text'}
return this.httpClient.get<string>(`${this.baseUrl}/account/getname`,
{responseType : 'text' as 'json'}).subscribe(
(data)=> console.log(data),
() => console.log("Failure")
);
Mais si nous spécifions le préamètre de type d'appel get sous forme de chaîne, il y aura une erreur
Le type '"text"' ne peut pas être affecté au type '"json"'
Pour éviter cela, nous devons modifier l'option requestType en {responseType: 'text' as 'json'}
return this.httpClient.get(`${this.baseUrl}/account/getname`,
{responseType : 'text' }).subscribe(
(data)=> console.log(data),
() => console.log("Failure")
);
Veuillez vérifier votre type de réponse dans votre méthode http (post / get / put) car c'est par défaut le type json, mais parfois votre réponse contient un blob ou du texte, ce type d'erreur se produit.
responseType ?: 'arraybuffer' | 'blob' | 'json' | 'text' in angular lib
Je pense qu'une erreur cors s'est produite lors de la prise de contact avec l'application asp.net mvc. Veuillez vous référer à ce lien. stackoverflow.com/questions/40079214/...