Httpclient Xamarin Forms 调用在 Android 中不起作用

Posted

技术标签:

【中文标题】Httpclient Xamarin Forms 调用在 Android 中不起作用【英文标题】:Httpclient Xamarin Forms call not working in Android 【发布时间】:2017-11-24 21:10:08 【问题描述】:

android 物理设备中调试 xamarin forms 应用程序时,我遇到了一个奇怪的问题。

应用程序进入中断模式,这是我收到的输出:

  Mono.Android[0xd6be8960] -> System[0xd6be9680]: 14
    11-24 23:44:44.098 I/Choreographer(18685): Skipped 930 frames!  The application may be doing too much work on its main thread.
    Thread started: <Thread Pool> #8
    Thread started: <Thread Pool> #9
    11-24 23:44:44.807 D/Mono    (18685): Assembly Ref addref Mono.Security[0xc17989e0] -> System[0xd6be9680]: 15
    Thread started: <Thread Pool> #10
    An unhandled exception occured.

我尝试了很多解决方案,例如允许应用程序中的网络访问,确保所有需要的包都在那里,例如:

Microsoft.Bcl.Build
Microsoft.net.HTTP
Newtonsoft.json

这是我在 UWP 中运行良好的代码 var request = new HttpRequestMessage();

    request.RequestUri = new Uri("https://jsonplaceholder.typicode.com/users");
    request.Method = HttpMethod.Get;

    request.Headers.Add("Accept", "application/json");
    var client = new HttpClient();
    HttpResponseMessage response = await client.SendAsync(request);
    HttpContent content = response.Content;
    var statusCode = response.StatusCode;
    var json = await content.ReadAsStringAsync();

编辑:我在设备日志中收到 2 个主要错误:

[ERROR] FATAL UNHANDED EXCEPTION: System.Net.HttpRequestException:An error occurred while sending the request --> System.Net.WebException:Error:SecureChannelFailure(The authentication or decryption has failed)

【问题讨论】:

你试过捕捉异常吗? 它只是进入中断模式,没有任何异常或解释 我在设备日志中收到 2 个主要错误:[错误] FATAL UNHANDED EXCEPTION: System.Net.HttpRequestException: 发送请求时发生错误 --> System.Net.WebException:Error: SecureChannelFailure(认证或解密失败) 【参考方案1】:

更改 Xamarin.Android 中的默认 SSL/TLS 实现。

转到Android项目设置->Android选项->高级->SSL/TLS实施并将其设置为Native TLS 1.2+

【讨论】:

感谢您的回复,我刚才更改了上面的选项,它工作了 我的意思是httpclient的实现,我还应该改变ssl/tls吗? 对我来说,只要更改 SSL/TLS 实现就可以了 您能否更新您的答案以包括更改 httpClient 实现?比,你的答案将是完美的非常感谢您的帮助【参考方案2】:

在某些情况下,您需要将 HttpClient 实现 更改为 AndroidClientHandler 而不是 Default,如下所示:

【讨论】:

以上是关于Httpclient Xamarin Forms 调用在 Android 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient 非常慢 - Xamarin Forms

Xamarin.Forms 上的 HttpClient PostAsync 失败(状态码:404)

HttpClient.SendAsync 在 Xamarin.Forms Android 上引发 ObjectDisposedException,但在 UWP 上却没有

Xamarin Forms Fusillade Refit - 使用单个 HttpClient 实例

Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?

Xamarin Forms HttpClient PostAsync 总是抛出 NSMallocException