2
votes

Uncaught TypeError: impossible de lire la propriété 'ngOriginalError' de undefined à getOriginalError - lorsque httpClient a renvoyé la chaîne

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


1 commentaires

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/...


3 Réponses :


5
votes

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);
); 

1 commentaires

oui, c'est correct. Mais la raison de l'erreur ne spécifiait pas le type de réponse du client http



1
votes

É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")
       ); 


0 commentaires

0
votes

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


0 commentaires