首页 > 解决方案 > 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");
            }
        }

还有另一个实现访问流量的工具我只是做这些事情

  1. 添加[assembly: Application(UsesCleartextTraffic = true)]到 AssemblyInfo.cs
  2. 创建一个文件 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>
  1. 最后将其添加到 AndroidManifest.xml 部分中,如下所示:

<应用程序 android:networkSecurityConfig="@xml/net_sec_conf" ....>

请帮我摆脱这个困...

标签: xamarinxamarin.forms

解决方案


在 AndroidManifest 文件中,在应用程序标签内使用

android:usesCleartextTraffic="true"

推荐阅读