(未知URL)的离子4 Http故障响应:0未知错误。在真实设备上调用api时

时间:2019-07-16 16:06:03

标签: http ionic-framework post

我有一个ionic 4应用程序,它调用.NET Core后端api。 它在chrome浏览器上正常工作,但是当我在android设备上运行apk时,响应为:

{"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":null,"ok":false,"name":"HttpErrorResponse","message":"Http failure response for (unknown url): 0 Unknown Error","error":{"isTrusted":true}}

关于标题,我附加了以下选项:

const httpOptions = {
    headers: new HttpHeaders({
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" , 
        "Access-Control-Allow-Origin": "*", 
        "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token, Accept, Authorization, X-Request-With",
        "Access-Control-Allow-Credentials" : "true",
        "Access-Control-Allow-Methods" : "GET, POST, DELETE, PUT, OPTIONS, TRACE, PATCH, CONNECT"  
       }) 
};  

我已经安装了插件: cordova-plugin-ionic-webview

并使用来自“ @ angular / common / http”的HttpClient

我的API远程托管,未使用ssl证书!

我搜索了所有解决方案,但没有一个解决我的问题

7 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,以下是我的条件:

  • 我的Ionic 4应用程序在Chrome上运行正常,但是当我在模拟器上运行它时,出现了“未知错误” 问题。
  • 我的后端是Laravel 6。
  • 我在使用Android Studio和Visual Studio代码的Mac上。
  • 我试图在服务器上调用API。

我尝试了多种方法来解决此问题。我已经确定这不是CORs问题,因为我已经处理了它。

那么如何解决类似问题。您只需添加一行,即

android:usesCleartextTraffic="true"

在清单文件中,即

[yourProject]/android/app/src/main/AndroidManifest.xml

你很好。

答案 1 :(得分:1)

某些事情我会建议您检查:

  

1)在服务器端启用CORS

     

2)如果您的API不是https,请确保android webview没有阻止流量。强制启用cleartextTraffic,默认情况下禁用。如下所示在您的应用中添加安全配置。设置参考here

<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
            <application android:usesCleartextTraffic="true" />
</edit-config>

答案 2 :(得分:1)

我遇到了这个问题,我在API中添加了cors条件并更改了WebViewer版本,但错误仍然存​​在。您可以通过修改运行我的api的服务器的IP地址来解决它。

/resources/android/xml/network_security_config.xml

答案 3 :(得分:1)

4 Possible Case 

1: Check your Internet connection 
2: Cors must be enabled from Backend
3:   android:usesCleartextTraffic="true" must be added in config.xml and android manifest file in the resource folder

4: Backend IP or domain should be configured in /resources/android/xml/network_security_config.xml




 

答案 4 :(得分:0)

最后,经过两天的努力,我可以解决问题! 我将API调用从'@ angular / common / http'迁移到了本地http'@ ionic-native / http / ngx' 带有此标题:

        // create headers data
        const headers = {
          "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", 
          'Accept': 'application/json, text/plain',
          "cache-control": "no-cache", 
          "Access-Control-Allow-Origin": "*", 
          "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token, Accept, Authorization, X-Request-With, Access-Control-Request-Method, Access-Control-Request-Headers",
          "Access-Control-Allow-Credentials" : "true",
          "Access-Control-Allow-Methods" : "GET, POST, DELETE, PUT, OPTIONS, TRACE, PATCH, CONNECT",  
          };

对我来说不利,目前,我必须在真实设备上进行测试。

答案 5 :(得分:0)

localhost不支持任何android应用。如果您尝试使用localhost来访问API,则android会认为localhost 0.0.0.0:

答案 6 :(得分:-1)

下面的改变终于对我有用了 将 API 端点从 http://localhost:7071/data 更改为 http://192.168.1.11:7071/data, 其中 192.168.1.11 是主机的本地 IP 地址。