正在获取状态代码0 angular HttpClient?

时间:2019-02-28 10:03:07

标签: javascript angular error-handling xmlhttprequest httpclient

使用angular 4的HttpClient get方法时,我遇到一个奇怪的问题。

从后端返回一些自定义错误消息,我应该处理这些错误消息并显示给用户。但是我在控制台中得到HttpErrorResponse

HttpErrorResponse:
error: ProgressEvent {isTrusted: true, lengthComputable: false, loaded: 0, 
total: 0, type: "error", …}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers: 
Map(0)}
message: "Http failure response for (unknown url): 0 Unknown Error"
name: "HttpErrorResponse"
ok: false
status: 0
statusText: "Unknown Error"
url: null

我读到有关问题here的信息,但没有一个解决方案对我有帮助。 在浏览器的“网络”标签中,我可以观察到服务器的真实响应:

"{\"StatusCode\":400,
  \"ExceptionMessage\":\"Internal Server Error\",
  \"Error\":\"Internal Server Error\",
  \"Errors\": 
  [{\"Code\":\"ValidationError\",\"Message\":\"Custom message here.\"}]}"

在网络标签中,请求看起来像这样:

General: 
Request URL: https://asdfhost:port/5c77a77101ae8643aeeb61e9
Request Method: GET
Status Code: 400 
Remote Address: address
Referrer Policy: no-referrer-when-downgrade

Response Headers:
cache-control: no-cache
content-type: application/json
date: Thu, 28 Feb 2019 09:42:22 GMT
expires: -1
pragma: no-cache
server: Kestrel
status: 400

Request Headers: 
x-correlation-id: 6if123
Provisional headers are shown
Accept: application/json, text/plain, */*
Authorization: Bearer asdfasdftoken
Origin: http://origin
Referer: http://origin/somewhere
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36

自定义错误是否有可能破坏xhr请求? 任何帮助将不胜感激。 :)

2 个答案:

答案 0 :(得分:2)

我在服务器中启用了CORS,但仍处于状态0,在浏览互联网后我没有找到解决方案,然后尝试了一些事情,发现这是CORS问题,但是由于我已配置,它仍返回状态0虚拟主机和 hosts 文件中的虚拟域,Angular Universal调用的是实际域,而不是回送本地主机域。这就是为什么它从服务器获得无效响应的原因。

根据我的研究,您将在以下情况下获得状态0

1-如果跨源资源共享(CORS)标头未设置为*或请求域

2-有时在普通请求中启用了CORS,但在PRE-FLIGHT请求(选项请求)中未启用CORS,请确保也对它启用了CORS。

3-您正在使用无效的域,这些域会将请求转发到其他域。

答案 1 :(得分:0)

实际上这是一个CORS问题。发生错误时,后端未设置Allow Origin标头。