【问题标题】:Xamarin - unable to access local api via Android (and iOS)Xamarin - 无法通过 Android(和 iOS)访问本地 api
【发布时间】:2020-11-02 07:20:24
【问题描述】:

我正在使用 macos Rider 开发适用于 Android 和 iO 的 Xamarin 应用程序。我有一个我试图通过应用程序使用的本地 api,但该应用程序似乎无法访问该 api。这发生在 Android 和 iOS 上。

专注于Android,我尝试将api更改为http://10.0.2.2:5000。问题是,我在使用模拟器浏览器时可以访问 api 端点,但尝试通过应用程序访问时,加载时卡住了。

在使用 iPhone 模拟器时,我收到错误消息,我应该使用 SSL 才能通过模拟器访问 api。

我尝试在 Android 上进行调试,以查明 api 是否真的是这里的问题(我觉得很奇怪,我可以通过模拟器浏览器访问它),但我无法弄清楚,因为没有抛出异常。当到达下面的代码时,它看起来好像只是“停止”。

总结一下,一些事实:

  1. 该应用在 iOS 和 Android 上崩溃
  2. api 正在运行,我已经尝试过http://10.0.2.2:5000 for Android,http://localhost:5000 for iPhone。我可以通过模拟器浏览器和 Postman 访问该应用程序。这也给了我结果,因此数据库或 api 似乎没有任何问题。
  3. 我使用的是 Mac(Jetbrains Rider)
  4. 当我使用在服务器上运行的同一个 api 时,它确实工作

【问题讨论】:

    标签: android macos .net-core xamarin.forms rider


    【解决方案1】:

    如果你想访问任何站点的HTTP连接,你需要在特定平台添加以下代码

    在 iOS 中

    将以下行添加到 info.plist

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    

    在安卓中

    android:usesCleartextTraffic="true" 行添加到AndroidManifest,如下所示

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"   android:versionCode="1" android:versionName="1.0" package="com.companyname.app32">
        <uses-sdk android:minSdkVersion="21"  android:targetSdkVersion="28"  />
        <application android:label="App32.Android" android:theme="@style/MainTheme" android:usesCleartextTraffic="true"></application>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    </manifest>
    

    【讨论】:

    • 我永远不会猜到这一点。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2019-09-13
    • 2016-08-07
    • 1970-01-01
    • 2021-08-05
    • 2021-09-03
    • 2021-12-02
    相关资源
    最近更新 更多