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'。
总结一下,一些事实:
- 应用在 iOS 和 Android
时出现故障
- api 是 运行,我试过
http://10.0.2.2:5000
换 Android,http://localhost:5000
换 iPhone。我可以通过模拟器浏览器和 Postman 访问该应用程序。这也给了我结果,所以数据库或 api 似乎没有任何问题。
- 我正在使用 Mac(Jetbrains Rider)
- 当我在服务器
上使用与 运行 相同的 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>
我正在使用 macos Rider 为 Android 和 iOs 开发 Xamarin 应用程序。我有一个本地 api,我正尝试通过该应用程序使用它,但该应用程序似乎无法访问 api。这发生在 Android 和 iOS.
上专注于 Android,我尝试将 api 更改为 http://10.0.2.2:5000
。问题是,我 可以 在使用模拟器浏览器时访问 api 端点,但尝试通过应用程序访问时,它会卡在加载过程中。
使用 iPhone 模拟器时,我收到错误消息,提示我应该使用 SSL 才能通过模拟器访问 api。
我尝试在 Android 上进行调试,以查明 api 是否真的是这里的问题(我发现我可以通过模拟器浏览器访问它很奇怪),但我无法弄清楚,因为没有抛出异常。当到达下面的代码时,它看起来好像只是 'stops'。
总结一下,一些事实:
- 应用在 iOS 和 Android 时出现故障
- api 是 运行,我试过
http://10.0.2.2:5000
换 Android,http://localhost:5000
换 iPhone。我可以通过模拟器浏览器和 Postman 访问该应用程序。这也给了我结果,所以数据库或 api 似乎没有任何问题。 - 我正在使用 Mac(Jetbrains Rider)
- 当我在服务器 上使用与 运行 相同的 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>