【发布时间】:2020-01-16 13:55:30
【问题描述】:
我有一个在 IIS 服务器的端口 8001 上运行的 Angular 4 应用程序,它应该访问在同一台服务器上运行的两个后端 .NET API,一个在端口 89 上,另一个在端口 83 上。
此应用程序正在由两种用户访问:一些用户与应用程序服务器位于同一网络上,另一些用户通过有权访问该服务器的端口 8001 的虚拟 IP 进行访问,并且仅访问该端口.
前端使用 REST 调用 API,代码如下:
this.http.post<boolean>(`http://<ServerHostname>:89/api/Controller/VerifyLogin`, body);
在与同一网络上的用户进行测试时,呼叫通过并且一切正常。通过虚拟IP访问的用户进行测试时,他们能够访问前端应用程序,前端显示但对API的调用不起作用。这可能是因为请求是使用服务器主机名而不是“localhost”发出的,但我不确定。
我尝试将 API 调用更改为使用 localhost,如下所示:
this.http.post<boolean>(`http://localhost:89/api/Controller/VerifyLogin`, body);
但是当我在同一个网络上测试时,API请求没有完成。
这是出现在 Chrome 控制台上的错误消息:
zone.js:2933 OPTIONS http://localhost:89/api/GravacaoDb/VerificarLogin net::ERR_CONNECTION_REFUSED
编辑: 这是 API 中我的 Web.config 文件中的 CORS 配置:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Max-Age" value="86400" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
我在做什么可能有什么问题?不允许请求的原因是什么?
【问题讨论】:
-
CORS 是通常的原因。在这种情况下,可能是因为您尚未设置 Web API 以允许 OPTIONS 标头。 Stack Overflow 上有很多关于此的帖子。
-
先尝试使用 POSTMAN 访问相同的 URL,并检查您的服务是否运行顺畅。超时可能是造成这种情况的原因
-
在任何情况下,您都需要进行更多调试(查看服务的日志、配置等)。
-
@HereticMonkey。我在我的应用程序上启用了 CORS 选项。它是在我的 Web.config 文件中设置的。我之前在构建项目并设置它时遇到了 CORS 问题
-
显示该配置。
标签: c# asp.net angular request