【问题标题】:HTTPS Post failureHTTPS 发布失败
【发布时间】:2018-07-05 03:21:27
【问题描述】:

我正在尝试向我的 Xamarin Forms 应用程序上的 API 发送 POST 请求,但我收到一个错误,表明发送请求时没有信任关系。我不知道为什么会这样以及如何解决它。这是一个例外:

System.Net.Http.HttpRequestException:发送时出错 请求 ---> System.Net.WebException: Error: TrustFailure (The 身份验证或解密失败。)---> System.IO.IOException: 认证或解密失败。 ---> System.IO.IOException:身份验证或解密失败。 ---> Mono.Security.Protocol.Tls.TlsException:从服务器收到的证书无效。错误代码:0xffffffff800b010f 在 Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (System.IAsyncResult asyncResult) [0x00031] 在 /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:430 在 Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (System.IAsyncResult ar, System.Boolean ignoreEmpty) [0x00000] 在 /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:256 在 Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (System.IAsyncResult 结果) [0x00071] in /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:418 --- 内部异常堆栈跟踪结束 ---

导致此异常的代码如下:

MultipartFormDataContent content = new MultipartFormDataContent();
content.Headers.Add("X-Auth-Token", "eb27c17f-8bd6-4b94-bc4f-742e361b4e6a");
content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");

content.Add(new ByteArrayContent(myByteImage));

try
{
    HttpResponseMessage response = await _client.PostAsync("https://10.54.66.160:9000/3/matching/search?list_id=3c9f2623-28be-435f-a49f-4dc29c186809&limit=1", content);

    string responseContent = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
    throw;
}

【问题讨论】:

  • 您使用的是自签名证书吗?
  • @DanielA.White 是的,API 有自签名证书
  • 这可能是问题所在。设备无法信任自签名证书。
  • @DanielA.White 有什么解决方法吗?我必须为其他服务安装其他证书类型吗?
  • @DanielA.White 我刚刚通过在 MainActivity.cs 上添加一些行来解决问题。感谢您的帮助!

标签: c# post xamarin xamarin.forms


【解决方案1】:

将以下代码放在MainActivity.cs上似乎问题解决了

System.Net.ServicePointManager.ServerCertificateValidationCallback +=
            (sender, cert, chain, sslPolicyErrors) =>
            {
                if (cert != null) System.Diagnostics.Debug.WriteLine(cert);
                return true;
            };

作为@DanielA.White HttpClient的mono实现似乎不支持自签名证书。

【讨论】:

  • 在 OnCreate - 在 LoadApplication 方法调用之前?
  • 我把下面的代码放在App.cs的构造函数上,谢谢亲
猜你喜欢
  • 1970-01-01
  • 2013-08-14
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2020-06-08
  • 2017-07-04
  • 1970-01-01
相关资源
最近更新 更多