发生一个或多个错误。 (无法解析 TLS 数据包 header)C# Xamarin Android 项目 Visual Studio

One or more errors occurred. (Unable to parse TLS packet header) C# Xamarin Android Project Visual Studio

当我为 API 服务器使用 http url 时,我收到错误:

    Message "One or more errors occurred. (Cleartext HTTP traffic to 194.141.118.43 not permitted)" 

当我将 https 放在 API 服务器的 url 上时,我收到错误消息:

    Message "One or more errors occurred. (Unable to parse TLS packet header)"  

我的RestServiceDataclass看起来像:

    using System;
using System.Diagnostics;
using System.Net.Http;
using System.Threading.Tasks;
using MaritsaTundzhaForecast.Models;
using Newtonsoft.Json;

namespace MaritsaTundzhaForecast.Services
{
    public class RestServiceData
    {
        HttpClient _client1;

        HttpClient _client2;

        public RestServiceData()
        {
            _client1 = new HttpClient();

            _client2 = new HttpClient();
        }

        public WaterBindingData GetWaterDataForecast(string query, string query2)
        {
            WaterDataJson waterData = new WaterDataJson();
            WaterStationsJson waterStations = new WaterStationsJson();

            WaterBindingData result = new WaterBindingData();
            try
            {

                var task = Task.Run(() => _client1.GetAsync(query));
                task.Wait();
                var response = task.Result;

                var task2 = Task.Run(() => _client2.GetAsync(query2));
                task2.Wait();
                var response2 = task2.Result;


                if (response.IsSuccessStatusCode && response2.IsSuccessStatusCode)
                {
                    var content = response.Content.ReadAsStringAsync().Result;
                    var content2 = response2.Content.ReadAsStringAsync().Result;

                    var json = content2.Replace("\"ardaforecast\":[[", "\"ardaforecast\":[ {\"items\": [")
                                                 .Replace("}],{\"fieldCount\"", "}],\"details\":{\"fieldCount\"")
                                                 .Replace("}]}", "}}]}");
                    waterData = JsonConvert.DeserializeObject<WaterDataJson>(content2);


                    waterStations = JsonConvert.DeserializeObject<WaterStationsJson>(content);

                    result.WaterData = waterData;
                    result.WaterStation = waterStations;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("\t\tERROR {0}", ex.Message);
            }

            return result;
        }
    }
}

这是我的 Constants class:

    using System;
using System.IO;

namespace MaritsaTundzhaForecast
{
    public static class Constants
    {
        public static string EndPoint = "https://194.141.118.43:3001/";
    }
}

如何解决此错误?

  1. 如果您的网站没有任何证书配置,请将https更改为http

  2. 设置为允许 http 请求。

    在你的xxx.Android->属性->AndroidManifest.xml中添加:android:usesCleartextTraffic="true".

  3. 如果以上方法不行,在你的文件夹下新建一个xml文件夹 Resources 文件夹并添加 network_security_config.xml 文件。添加 代码:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true"/>
    </network-security-config> 
    

    在你的xxx.Android->属性->AndroidManifest.xml中添加:

    android:networkSecurityConfig="@xml/network_security_config"
    

如果你想使用http请求,你应该在AndroidManifest.xml中的应用程序标签中添加android:usesCleartextTraffic="true",它只在API 23级及更高级别使用(这是足够测试)。 你应该在线使用 https 请求,你需要一个域名,并且 https 将在你的服务器中使用 443 端口。通常需要Nginx或者Apache监听443连接自己的服务器。