Cordova Angular 访问 Web Api 连接被拒绝
Posted
技术标签:
【中文标题】Cordova Angular 访问 Web Api 连接被拒绝【英文标题】:Cordova Angular Get to Web Api Connection Refused 【发布时间】:2015-01-23 00:21:06 【问题描述】:我正在使用 Visual Studio 2013 Update 4,并且我有一个 Web api 项目设置来接收返回数组的获取请求。对于客户端应用程序,我已经设置了cordova,并正在使用 ng-resource 模拟一个 android 角度应用程序来调用 web api get。每次我调用 GET 时都会收到一个表示连接被拒绝的ripple.js 错误。即使我也尝试使用真正的 android 设备,我也会被拒绝连接。这是使用波纹模拟器时的错误
选项http://****:4400/ripple/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rur…Fget%3D%257B%2522method%2522%3A%2522GET%2522%2C%2522array%2522%3Atrue%257D net::ERR_CONNECTION_REFUSED
我确定在 web api 2 服务器上启用了 cors,因为 cordova 和 web api 项目是同一本地主机上的不同端口号。我不仅证明了 cors 的功能,还证明了代码,方法是创建一个带有 angular 网页的 cordova angular 应用程序的精确副本。我也尝试过使用邮递员,并且都正确地得到了 json 响应。只有cordova android应用程序给我连接被拒绝。任何帮助将不胜感激!
这是 angular get 的样子
app.factory('mrMaintService', function ($resource)
return $resource('http://localhost:15528/api/requests',
get: method: 'GET', array: true
);
);
这表明我允许 web api 项目中的所有域:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
【问题讨论】:
您是否已将您的 cordova config.xml 中的 api 域列入白名单。见cordova.apache.org/docs/en/edge/… 那里有一个星号,所以我假设所有这些都被列入白名单。我也只是明确地添加了 web api localhost 但没有运气。还有其他建议吗? 【参考方案1】:解决方案是从模拟器的下拉菜单中禁用跨域代理。如果您不熟悉波纹模拟器,很容易犯错误。
【讨论】:
您还有其他建议吗?我已经在 webapi 项目和 cordova 配置中添加了所有域,禁用了波纹代理,仍然没有运气。 (它在 azure 中工作,只是 localhost 是个麻烦) Ripple 的三个设置都试过了吗?我相信远程、本地和禁用。另外,也许您遇到了 cors 问题? @Larsi 已经好几个月了,但我希望您找到了解决问题的方法。如果没有,请看我下面关于使用Android特殊地址10.0.2.2的回答 @ErinGeyer - 感谢您的评论。是的,我找到了一个 sln,但不确定它是什么 - 我应该更新我的 cmets,对此感到抱歉。【参考方案2】:有关访问http://localhost
(与127.0.0.1
相同)的问题的答案可以在这里找到:http://developer.android.com/tools/devices/emulator.html - 它说:
"还要注意,你的开发机器上的地址127.0.0.1
对应于模拟器自己的环回接口。如果你想访问在你的开发机器的环回接口上运行的服务(你的机器上又名127.0.0.1),你应该使用改为特殊地址 10.0.2.2。”
因此,不要使用http://localhost
,而是使用http://10.0.2.2
,然后附加您正在使用的任何端口。示例:http://localhost:8001
可以通过http://10.0.2.2:8001
访问
【讨论】:
以上是关于Cordova Angular 访问 Web Api 连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
django、cordova、ionic 和 angular.js 的 CORS 问题
typescript Angular 2应用程序角色访问装饰器,包装内置CanAccess功能。当用户角色不是ap时,防止视图转换
原生 ios phonegap/cordova 的 Angular $templateCache 和 $stateProvider 修复