Dobim "Http neuspešen odgovor za (neznan url): 0 Unknown Error" namesto dejanskega sporočila o napaki v Angularju

Uporabljam Angular 4 HttpClient za pošiljanje zahtevkov zunanji storitvi. Gre za zelo standardno nastavitev:

this.httpClient.get(url).subscribe(response => {
  //do something with response
}, err => {
  console.log(err.message);
}, () => {
  console.log('completed');
}

Težava je v tem, da se mi ob neuspešnem zahtevku prikaže splošno sporočilo Http failure response for (unknown url): 0 Unknown Error sporočilo v konzoli. Medtem ko v Chromu pregledam neuspeli zahtevek, vidim, da je status odgovora 422, v zavihku "predogled" pa vidim dejansko sporočilo, ki opisuje vzrok neuspeha.

Kako lahko dostopam do dejanskega odzivnega sporočila, ki ga lahko vidim v orodjih chrome dev tools?

Tukaj je posnetek zaslona, ki prikazuje težavo:

Rešitev

Težava je bila povezana s CORS. V konzoli Chrome sem opazil še eno napako: Na zahtevanem viru ni glave 'Access-Control-Allow-Origin'. Izvor 'http://localhost:4200' zato dostop ni dovoljen. Odgovor je imel kodo stanja HTTP 422.`

To pomeni, da v odgovoru zalednega strežnika ni bilo glave Access-Control-Allow-Origin, čeprav je bil zaledni strežnik nginx nastavljen tako, da te glave dodaja odgovorom z direktivo add_header.

Vendar ta direktiva doda glave samo, če je koda odgovora 20X ali 30X. Pri odgovorih z napako glave manjkale. Uporabiti sem moral parameter always, da bi zagotovil, da se glave dodajo ne glede na kodo odgovora:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;

Ko je bil zaledni strežnik pravilno konfiguriran, sem lahko do dejanskega sporočila o napaki dostopal v kodi Angular.

Komentarji (3)

Pri meni ga je povzročila izjema JsonSerializerException na strani strežnika.

Med izvajanjem zahteve je prišlo do neobravnavane izjeme. Newtonsoft.Json.JsonSerializationException: Samonanašajoča se zanka zaznana s tipom ...

Odjemalec je dejal:

POST http://localhost:61495/api/Action net::ERR_INCOMPLETE_CHUNKED_ENCODING
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}

Poenostavitev vrste odgovora z odpravo zank je rešila težavo.

Komentarji (0)

Če kot zaledni strežnik uporabljate Laravel, za rešitev težave CROS v projektu Angular ali IONIC uredite svojo datoteko .htaccess tako, da vstavite to kodo.

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Komentarji (3)