Я получаю "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?
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 исправили проблему.
Не так стар, как другие вопросы, но я просто боролся с этим в приложении Ionic-Laravel, и здесь ничего не работает (и другие сообщения), поэтому я установил https://github.com/barryvdh/laravel-cors дополнение в Laravel и началось, и оно работает довольно хорошо.
Мое было вызвано недопустимым отношением в моделях, которые я пытался запросить. Выяснено путем отладки ответа он разбился на отношение.


Comments