Xamarin - 无法通过 Android(和 iOS)访问本地 api

Xamarin - unable to access local api via Android (and iOS)

我正在使用 macos Rider 为 Android 和 iOs 开发 Xamarin 应用程序。我有一个本地 api,我正尝试通过该应用程序使用它,但该应用程序似乎无法访问 api。这发生在 Android 和 iOS.

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

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

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

总结一下,一些事实:

  1. 应用在 iOS 和 Android
  2. 时出现故障
  3. api 是 运行,我试过 http://10.0.2.2:5000 换 Android,http://localhost:5000 换 iPhone。我可以通过模拟器浏览器和 Postman 访问该应用程序。这也给了我结果,所以数据库或 api 似乎没有任何问题。
  4. 我正在使用 Mac(Jetbrains Rider)
  5. 当我在服务器
  6. 上使用与 运行 相同的 api 时,它 确实 有效

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

在iOS

将以下行添加到 info.plist

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

在Android

将行 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>