【问题标题】:Xamarin Android HttpClient Error when use from a Class从类中使用 Xamarin Android HttpClient 错误
【发布时间】:2016-11-06 01:51:50
【问题描述】:

我有以下代码在访问具有 SSL 的站点时出错。 (错误:SecureChannelFailure(认证或解密失败。)他们的SSL证书有效。直接调用HttpClient代码时没有问题。我的代码有什么问题?

 Uri uri =new Uri("https://jsonplaceholder.typicode.com/posts/1");
  using (HttpClient httpclient = new HttpClientClass())
   {
       var tt = await httpclient.GetAsync(uri);
       string tx = await tt.Content.ReadAsStringAsync();
       Log.Info(TAG, tx);
    }




 public class HttpClientClass : HttpClient
  {
     private HttpClient _httpclient = null;
     private HttpClientHandler messagehandler = new Xamarin.Android.Net.AndroidClientHandler();

     public  HttpClientClass()
     {
       _httpclient = new HttpClient(messagehandler);
      }
   }

没有问题的代码

Uri uri =new Uri("https://jsonplaceholder.typicode.com/posts/1");
  using (HttpClient httpclient = new HttpClient())
   {
       var tt = await httpclient.GetAsync(uri);
       string tx = await tt.Content.ReadAsStringAsync();
       Log.Info(TAG, tx);
    }

【问题讨论】:

    标签: ssl xamarin.android httpclient


    【解决方案1】:

    感谢Https with TLS 1.2 in Xamarin 这是解决方案。添加 Paul Betts 的 Nuget modernhttpclient 并在下面使用。这应该在课堂上工作或不工作。

                Uri uri = new Uri("https://jsonplaceholder.typicode.com/posts/1");
                using (var httpClient = new HttpClient(new NativeMessageHandler()))
                {
                    var tt = await httpClient.GetAsync(uri);
                    string tx = await tt.Content.ReadAsStringAsync();
                    //Log.Info(TAG, tx);
                }
    

    【讨论】:

    • 问题是“内部类”示例不起作用,但在直接调用 httpclient 时起作用。 “内部类”的目的是让我可以在一个地方更改为不同的处理程序,而不是在整个项目中进行查找和替换。
    • 直接调用 httpclient 时也不适合我。您使用的是 XFroms 还是 Classic?您从哪里调用此代码?活动还是 PCL?
    • 我正在使用 Xamarin Android 经典版,我只是放入了一个类文件。
    • 这就是我所做的,并将它放在我的按钮点击活动中。单独的 httpclient 对我不起作用。我正在使用 VS 模拟器 API 23。我尝试的任何其他站点,例如 Uri uri = new Uri("ottawa.energate.ca"); 都有效。这是建议。你可以试试我现在提到的 Uri 有和没有类吗?让我们知道如何它奏效了。
    • 如果 uri 是非 SSL,它可以同时使用这两种方法。如果直接在 Activity 中使用,我的原始 Uri 没有问题。顺便说一句,我正在实际的 Android 设备、KitKat 4.4、Lolipop 5 和 Marshmallow 6.0 上进行测试,当与“Inside Class”一起使用时,它们都会显示相同的错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    相关资源
    最近更新 更多