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的主要内容,如果未能解决你的问题,请参考以下文章
重新安装 Windows/Visual Studio 2015/Xamarin - 找不到 Android SDK
无法使用 PCLStorage 或 Xamarin Forms Labs 在 Android 文件系统中创建文件夹/文件