Angular + NET Core“(未知URL)的HTTP失败响应:0未知错误”

时间:2018-06-20 15:21:28

标签: angular http cors .net-core asp.net-core-webapi

我正在尝试从我的角度应用程序向我的.NET Core WebAPI后端发送GET请求。两者都在localhost上运行。 Angular在端口4200上运行,WebAPI在端口5001上运行。当我在Angular中发出GET请求时,控制台中显示以下错误:

Console error

在线搜索后,几乎每个答案都归结为一个问题,即后端服务器上未正确启用CORS。但是,据我所知,我已经正确设置了CORS。这是我对CORS的配置:

enter image description here

enter image description here

这是Angular中的服务功能以及WebAPI中的GET方法:

enter image description here

enter image description here

我知道该URL是正确的,因为当我将该URL复制到Postman时,它可以正常工作。

主要是我想知道我是否搞砸了CORS,因为这似乎是此错误消息的主要问题,或者是否还有其他我可能错过的事情。

编辑(解决方案): 好的,所以通过各种尝试和错误,我相信我已经找到了问题。当我进行初始项目时,我是在JetBrains Rider中进行项目的。我决定尝试在Visual Studio中创建一个新项目,看看会发生什么,但是问题仍然存在。事实证明,问题不在于CORS,而在于无效的HTTPS localhost证书。当我尝试运行控制台命令use_backend apache if { ssl_fc_sni_end domain.com } 时,没有弹出确认证书的提示,而是一条通用的错误消息,没有用。这是我解决问题的方法(无论这是否是正确的讨论方式)。

  1. 运行WebAPI并在Chrome中打开该网站。
  2. 在HTTPS连接上,Chrome将允许您通过单击URL旁边的“安全”或“不安全”标签来查看证书信息。我单击了它,然后打开了证书信息窗口。
  3. 有一个名为“详细信息”的标签,可以将证书保存到计算机中。
  4. 保存证书后,我可以右键单击它,然后有一个右键单击选项,称为“安装证书”。
  5. 我安装了证书,只需单击下一步,然后将值保留为默认值。之后,Angular应用程序现在可以按预期发出GET,POST,PUT等请求,并且当我将Web API URL复制到Chrome中时,Chrome现在表示连接是安全的,而不是像以前那样不安全。

2 个答案:

答案 0 :(得分:3)

好的,因此,通过各种尝试和错误,我相信我已经找到了问题所在。当我进行初始项目时,我是在JetBrains Rider中进行项目的。我决定尝试在Visual Studio中创建一个新项目,看看会发生什么,但是问题仍然存在。事实证明,问题不在于CORS,而在于无效的HTTPS localhost证书。当我尝试运行控制台命令dotnet dev-certs https --trust时,没有弹出确认证书的提示,而是一条通用的错误消息,没有用。这是我解决问题的方法(无论这是否是正确的讨论方式)。

  1. 运行WebAPI并在Chrome中打开该网站。
  2. 在HTTPS连接上,Chrome将允许您通过单击URL旁边的“安全”或“不安全”标签来查看证书信息。我单击了它,然后打开了证书信息窗口。
  3. 有一个名为“详细信息”的标签,可以将证书保存到计算机中。
  4. 保存证书后,我可以右键单击它,然后有一个右键单击选项,称为“安装证书”。
  5. 我安装了证书,只需单击下一步,然后将值保留为默认值。之后,Angular应用程序现在可以按预期发出GET,POST,PUT等请求,并且当我将Web API URL复制到Chrome中时,Chrome现在表示连接是安全的,而不是像以前那样不安全。

这是我在运行dotnet dev-certs https --trust时遇到的错误:

enter image description here

答案 1 :(得分:0)

我遇到了同样的问题,但与证书无关。

简单地说,只需在 sam deploy --stack-name sample-stack --s3-bucket bucket-to-deploy --capabilities CAPABILITY_IAM 上的配置方法中省略 HTTPS 重定向就对我有用。

startup.cs

然后,您应该将 Angular 应用程序设置为将请求发送到 app.UseHttpsRedirection(); 协议。默认应该是:HTTP

或者,您可以将 HTTPS 重定向包含在 http://localhost:5000 检查中,以免忘记将其带回部署。

isProduction