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

Posted

技术标签:

【中文标题】Xamarin - 无法通过 Android(和 iOS)访问本地 api【英文标题】:Xamarin - unable to access local api via Android (and iOS) 【发布时间】: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 是否真的是这里的问题(我觉得很奇怪,我可以通过模拟器浏览器访问它),但我无法弄清楚,因为没有抛出异常。当到达下面的代码时,它看起来好像只是“停止”。

总结一下,一些事实:

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

【问题讨论】:

【参考方案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>

【讨论】:

我永远不会猜到这一点。谢谢!!

以上是关于Xamarin - 无法通过 Android(和 iOS)访问本地 api的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单无法通过它“x:Name”访问控件

重新安装 Windows/Visual Studio 2015/Xamarin - 找不到 Android SDK

无法使用 PCLStorage 或 Xamarin Forms Labs 在 Android 文件系统中创建文件夹/文件

Xamarin Android 支持库 v4(不完整)?

Xamarin - 无法确定 Android SDK 位置

Xamarin.forms,Android 部署问题。应用程序无法在模拟器和物理设备上部署