【问题标题】:Ionic on iOS not sending request to external ApiiOS 上的 Ionic 不向外部 API 发送请求
【发布时间】:2020-01-03 16:13:40
【问题描述】:

我有用 WebApi2 编写的自定义 api,它以 json 格式提供一些数据。我正在尝试使用 Angular 的 $http 从 iOS 和 Android 上的 Ionic 访问该特定 API。在 Android 上一切正常,我收到了正确的结果。但是在 iOS 上发生了奇怪的事情,因为 $http 甚至不发送请求并立即抛出错误,返回 http 状态代码 0。这个问题只存在于 iOS 模拟器和 iPhone 上。此外,在请求任何其他站点或伪造的测试 api 时,这种行为是无法观察到的。

我已经尝试过的:

  • 添加“Access-Control-Allow-Origin: *”标头。
  • 将代理添加到 ionic.project,但这仅在运行 Ionic Serve 时解决了问题
  • 在config.xml中添加
  • 通过设置来配置 Angular 以使用跨域:

    $httpProvider.defaults.useXDomain = true; 删除 $httpProvider.defaults.headers.common['X-Requested-With'];

有什么线索吗?也许这是服务器端的问题?

【问题讨论】:

    标签: angularjs ionic-framework asp.net-web-api2


    【解决方案1】:

    在低于 9.0 的 iOS 版本上也会发生这种情况吗?因为从 iOS 9.0 开始,$http 就出现了一些问题。如果没有,请查看this 文章。

    寻找解决方案

    当我开始搜索这个错误时,我发现了这个论坛帖子。它 说贡献者也遇到了这个错误,而且这个错误 当使用 $http 服务发出网络请求时触发。我 在我的应用程序中也使用了 $http,但我没有通过它提出任何请求 当应用程序启动时。此外,在论坛帖子中,它说 问题是通过将自定义标头添加到网络请求来触发的。至 解决问题,标题中不应有前导空格 价值。我有自定义标题,但在 价值。所以我决定,(结果是错误的)这篇文章 帮不了我。

    这是我接下来尝试的:

    我再次阅读了 Ionic 博客文章中的所有建议并尝试 将它应用到我的项目中——它没有帮助。我决定像我一样 在供应商文件中出现错误,我应该尝试更新 Ionic 框架、Ionic CLI 和所有第三方库(Angular、 Restangular, ngStorage, ...) - 花了一些时间,但是当我运行 应用程序再次出现同样的错误。我创建了一个新的“清晰”离子应用程序和 它工作正常 - 所以我确定问题出在某个地方 我的代码。我开始调试应用程序并在我的代码中挖掘 “老派的方式”——试图删掉代码块,看看是否 应用程序然后就可以工作了(因为我在有可能之前得到了错误 使用任何 Safari 开发工具进行调试)。通过这种方式,我发现了 我的代码中的行触发了这个错误。就是这一行:

    $http.defaults.headers.common.Authorization = 'Basic ' + $localStorage.user.authToken; 
    

    我使用自己的服务依赖 注入,它在服务时执行一行代码(见上文) 被初始化。这就是为什么 $http 服务也会导致 我遇到的错误。我从我的代码中删除了这一行 将其替换为配置中的授权令牌标头 每个请求,像这样:

     $http.post(appConfig.apiUrl + 'profile', data, {  headers: {'Authorization': $localStorage.user.authToken} })
    

    在那之后,我的应用开始加载 (Hurrah),这让我看到了其他的 问题(嘘)。

    【讨论】:

    • 请求其他站点工作正常。所以自定义标题不会有问题,因为我没有添加任何标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多