У меня есть приложение Angular 4, работающее на порту 8001 сервера IIS, которое должно получить доступ к двум внутренним интерфейсам. NET API, работающие на одном сервере, один на порту 89, а другой на порту 83 .
Доступ к этому приложению осуществляют два типа пользователей: некоторые из них находятся в одной сети с сервером приложений, а другие - через виртуальный IP-адрес, имеющий разрешение на доступ к порту 8001 этого сервера, и только этот порт.
Внешний интерфейс вызывает API-интерфейсы, используя REST, с кодом, подобным следующему:
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
РЕДАКТИРОВАТЬ : Вот конфигурация CORS в моем файле Web.config в API:
<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>
В чем может быть проблема с тем, что я делаю? В чем может быть причина того, что запрос не разрешен?