Я получаю "Http failure response for (unknown url): 0 Unknown Error" вместо фактического сообщения об ошибке в Angular



Я использую Angular 4 HttpClient для отправки запросов на внешний сервис. Это очень стандартная настройка:



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


Проблема в том, что когда запрос не выполняется, я вижу общий
Http failure response for (unknown url): 0 Unknown Error сообщение в консоли. Между тем, когда я проверяю неудачный запрос в chrome, я вижу, что состояние ответа-422, а во вкладке "предварительный просмотр" я вижу фактическое сообщение, описывающее причину сбоя.



Как получить доступ к фактическому ответному сообщению, которое я вижу в инструментах chrome dev?



Вот скриншот демонстрация проблемы:
Введите описание изображения здесь

2151   7  

7 ответов:

Проблема была связана сCORS . Я заметил, что в консоли Chrome появилась еще одна ошибка:

На запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Происхождение 'http://localhost:4200 ' поэтому доступ запрещен. Ответ имел код состояния HTTP 422.'

Это означает, что в ответе от серверной части отсутствовал заголовок Access-Control-Allow-Origin, хотя серверная часть nginx была настроена для добавления этих заголовков к ответам с помощью add_header директива .

Однако эта директива добавляет заголовки только в том случае, если код ответа равен 20X или 30X. Мне нужно было использовать параметр always, чтобы убедиться, что заголовок добавляется независимо от кода ответа:

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

Как только серверная часть была правильно настроена, я мог получить доступ к фактическому сообщению об ошибке в коде Angular.

Если вы используете Laravel в качестве бэкенда, то отредактируйте его .htaccess файл, просто вставив этот код, чтобы решить проблему CROS в вашем Angular или IONIC проекте

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

Для меня это было вызвано JsonSerializerException на стороне сервера.

При выполнении запроса произошло необработанное исключение Newtonsoft.формат JSON.JsonSerializationException: содержит ссылки на себя петлю обнаружен с типом ...

Клиент сказал:

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

Упрощение типа ответа устранение петель решило проблему.

Эта ошибка возникла у меня в Firefox, но не в Chrome при разработке локально, и она оказалась вызвана тем, что Firefox не доверяет моему локальному API-сертификату ssl (который не является действительным, но я добавил его в свой локальный CERT store, что позволило chrome доверять ему, но не ff). Переход к API напрямую и добавление исключения в Firefox исправили проблему.

Работая на меня после отключения расширения Ads block В chrome, эта ошибка иногда появляется из-за того, что что-то блокирует http в браузере

Введите описание изображения здесь

Не так стар, как другие вопросы, но я просто боролся с этим в приложении Ionic-Laravel, и здесь ничего не работает (и другие сообщения), поэтому я установил https://github.com/barryvdh/laravel-cors дополнение в Laravel и началось, и оно работает довольно хорошо.

Мое было вызвано недопустимым отношением в моделях, которые я пытался запросить. Выяснено путем отладки ответа он разбился на отношение.

Comments

    Ничего не найдено.