【问题标题】:One or more errors occurred. (Unable to parse TLS packet header) C# Xamarin Android Project Visual Studio发生一个或多个错误。 (无法解析 TLS 数据包头)C# Xamarin Android Project Visual Studio
【发布时间】:2021-11-26 18:30:54
【问题描述】:

当我为 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)"  

我的RestServiceData 类看起来像:

    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 班级:

    using System;
using System.IO;

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

我可以做些什么来修复这个错误?

【问题讨论】:

  • 您没有有效的 SSL 设置。只需在浏览器中加载您的 url 就会显示 SSL 错误。有许多在线工具可以检查您的 SSL 配置。或者,您可以按照 previous question 中的建议启用 UsesCleartextTraffic

标签: c# android xamarin restful-url


【解决方案1】:
  1. 如果您的网站没有任何证书配置,请将https 更改为http

  2. 设置为允许 http 请求。

    添加你的 xxx.Android->Properties->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->Properties->AndroidManifest.xml:

    android:networkSecurityConfig="@xml/network_security_config"
    

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 2021-03-21
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多