xamarin - Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod 不允许到 xxxx 的明文 HTTP 流量
问题描述
我只是 xamarian 移动应用程序开发的新手。我有简单的任务要做,只是登录功能,但我无法实现目标。我把这些东西放在 MainPage.xml 中
public async void BtnLogin_Clicked(object sender, EventArgs e)
{
//var vm = new LoginViewModel();
//this.BindingContext = vm;
string email = string.Empty, password = string.Empty;
email = Email.Text;
password = Password.Text;
if (!string.IsNullOrEmpty(email) && !string.IsNullOrEmpty(password))
{
try
{
string WebAPIUrl = "http://smartentry.visitmydemo.xyz:81/App/SignIn?Email=" + email + "&Password=" + password;
//string WebAPIUrl = "http://smartentry.visitmydemo.xyz/App/SignIn";
//object input = new
//{
// Email = email,
// Password = password
//};
//string inputJson = JsonConvert.SerializeObject(input);
using (HttpClient client = new HttpClient())
{
Uri uri = new Uri(WebAPIUrl);
client.Timeout = TimeSpan.FromMinutes(30);
string json = await client.GetStringAsync(uri);
EntryClass MyEntry = JsonConvert.DeserializeObject<EntryClass>(json);
if (Convert.ToInt32(MyEntry.UserAccountId) > 0 && Convert.ToInt32(MyEntry.UserRoleId) > 0 && (Convert.ToBoolean(MyEntry.IsActive) == true) && Convert.ToInt32(MyEntry.ClientId) > 0)
{
//nevigate to dashboard page
await App.Current.MainPage.DisplayAlert("Error", "Login Success!!", "OK");
}
else if (Convert.ToInt32(MyEntry.UserAccountId) == 0 && Convert.ToInt32(MyEntry.UserRoleId) == 0 && (Convert.ToBoolean(MyEntry.IsActive) == false) && Convert.ToInt32(MyEntry.ClientId) == 0)
{
//if login fails
await App.Current.MainPage.DisplayAlert("Error", "Invalid Login, try again!!", "OK");
}
}
}
catch (Exception ex)
{
await App.Current.MainPage.DisplayAlert("Error", "Error :" + ex.Message.ToString(), "OK");
}
}
else
{
await App.Current.MainPage.DisplayAlert("Error", "All fields are required", "OK");
}
}
还有另一个实现访问流量的工具我只是做这些事情
- 添加
[assembly: Application(UsesCleartextTraffic = true)]
到 AssemblyInfo.cs - 创建一个文件 res/xml/net_sec_conf.xml,如下所示:
<network-security-config> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">http://smartentry.visitmydemo.xyz:81/</domain> <trust-anchors> <certificates src="system" /> </trust-anchors> </domain-config> </network-security-config>
- 最后将其添加到 AndroidManifest.xml 部分中,如下所示:
<应用程序 android:networkSecurityConfig="@xml/net_sec_conf" ....>
请帮我摆脱这个困...
解决方案
在 AndroidManifest 文件中,在应用程序标签内使用
android:usesCleartextTraffic="true"
推荐阅读
- javascript - 创建模式时“新模式”的目的是什么?
- python-3.x - Python3:将字典值打印到 'a': [1, 2, 3, 5, 6, 9] 到 'a': 1-3, 5-6, 9?
- c++ - 基于 C++17 中的范围,用于自定义容器或具有不同开始/结束类型的通用类
- docker - 使用 Docker Toolbox for Windows 在 uses 文件夹外挂载驱动器
- oop - 在 Lua 中摆脱一个类的实例
- java - 在二维数组的行中创建一个最大值数组
- python - 当我运行测试时,django 如何重新定义 DJANGO_SETTINGS_MODULE?
- c# - 对象类型和泛型 T 类型的函数重载所需的优先级说明
- java - Spring Bean 验证给出 ConstraintDeclarationException
- macos - 当我运行我的 cpp 文件时,由于未捕获的异常而终止应用程序