安卓设备中 Cordova 的 Http 请求问题

3
我有Cordova > 4.0.0,所以它具有CSP和白名单安全措施。
在浏览器中,我可以向API发出请求,但在Android设备上,它会给我这个错误:
file:///http:/xxx.xxx.xxx/api/Login/DoLogin
未能加载资源:net :: ERR_FILE_NOT_FOUND
我搜索了解决方案,但没有任何作用。
根据Cordova Whitelist Plugin文档,我的config.xml具有以下字段:
 <allow-navigation href="*" />
 <allow-intent href="*" />
 <access origin="*" />"

信息:我尝试了多种参数组合,使用API的URL。(例如:<access origin="http://xxx.xxx.xxx/" subdomains="true" />

在我的Index.html中,我有这个CSP:

 <meta http-equiv="Content-Security-Policy" 
 content="default-src *; style-src * 'self' 'unsafe-inline' 'unsafe-eval';
               script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

信息:我已经尝试了Cordova Whitelist Plugin提供的其他CSP组合。

所以,在任何人询问之前,我已经安装了:

  • cordova-whitelist-plugin

并且使用Restangular进行请求。

我无法解决它,有人可以帮我吗?

编辑:请求代码

var baseLogin = Restangular.all('http:/xxx.xxx.xxx/api/Login/DoLogin');

dataApi.doLogin = function (var1, var2, var3, var4, var5) {
    // $http() returns a $promise that we can add handlers with .then()
    var parameter = null;
        parameter = {
            var1: var1,
            var2: var2,
            var3: var3,
            var4: var4,
            var5: var5
        };
    return baseLogin.post(parameter);
};
我使用Ionic,所以在浏览器中存在CORS问题,为了解决这个问题,我在ionic.project文件中使用了代理,但只有在浏览器中才会调用它,在设备上不会使用它。

你能贴出堆栈跟踪吗? - zIronManBox
1
看起来不像是与内容安全策略相关的错误。相反,似乎您的URL有误:我猜它应该是http:/xxx.xxx.xxx/api/Login/DoLogin,而不是file:///。 - Phonolog
1
@Phonolog 我正要加上这个。由于手机是“远程”访问文件,因此不需要它并会导致内部异常。 - Malavos
我不知道file://是从哪里来的,这就是为什么。我将尝试使用$resource或$http来查看是否有所变化。 - cagica
1
我不熟悉Restangular,所以无法帮助找出问题所在,也许这甚至是Restangular的一个错误。为了快速解决问题,我建议使用$http进行简单的post操作,在我的Android设备上这个方法很有效... - Phonolog
显示剩余2条评论
1个回答

1

尝试从您的URL中删除“file”,如@Phonolog所评论的。

这不是必需的,可能会在手机上引起内部异常。尝试仅使用http:/xxx.xxx.xxx/api/Login/DoLogin,就像使用WCF服务一样。还要确保此端点已正确配置以接受传入请求。

附加说明:此外,您应该注意这些标记:

<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" />"

这意味着允许访问所有内容,也允许与其他应用程序/服务进行通信。因此要小心,这可能会在未来引起安全问题。


我知道这是什么意思,只是为了调试目的,我只是想让它工作,但即使拥有所有权限,我也无法做到。我注意到了file://,但我没有向那个URL发出请求,有些东西正在改变我的URL并在前面加上file://。而我不知道是什么。我正在使用Restangular进行请求。 - cagica
我不明白你的评论,抱歉。你没有错吗?它没有起作用吗?如果没有,这次有什么异常? - Malavos
抱歉,它被发送时未完成。 - cagica
1
也许在你调用API的代码中添加一些内容可以帮助解决这个问题... - Phonolog
@pcagica 没关系,我们在这里帮忙。如果你不介意的话,请根据 Phonolog 的要求添加更多的代码。 - Malavos
这是一个简单的请求,但我会编辑问题。 - cagica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接