2017-01-25 75 views
5

Tôi đang học cách sử dụng xamarin với C#, và tôi đã có một ứng dụng Android để thực hiện các yêu cầu web tới một API bên ngoài và tôi nhận được lỗi sau;WebException trong Xamarin, sử dụng HttpClient

System.Net.Http.HttpRequestException: An error occurred while sending the 
request ---> System.Net.WebException: Error: SecureChannelFailure (The 
authentication or decryption has failed.) ---> System.IO.IOException: The 
authentication or decryption has failed. ---> System.IO.IOException: The 
authentication or decryption has failed. ---> 
Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed. 

Mã của tôi như sau;

public async Task<List<T>> GetList<T>(string url) 
    { 
     HttpClient client = new HttpClient(); 
     var response = await client.GetAsync(new Uri(url)); 
     response.EnsureSuccessStatusCode(); 
     var content = await response.Content.ReadAsStringAsync(); 
     return JsonConvert.DeserializeObject<List<T>>(content); 
    } 

MainClass trong Android gọi lớp lõi, gọi lớp dịch vụ này.

HttpCâu hỏi yêu cầu hoạt động khi API thực hiện không sử dụng HTTPS, nhưng sẽ ném lỗi này bất cứ khi nào tôi sử dụng API đã bật HTTPS.

Tôi cũng đang sử dụng Thư viện lớp di động để lưu trữ mã, vì vậy, không thể sử dụng HttpWebRequest cho yêu cầu web.

Tôi cũng đã thử;

ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true; 

Và;

System.Security.Cryptography.AesCryptoServiceProvider b = new System.Security.Cryptography.AesCryptoServiceProvider(); 

Trong ứng dụng của tôi OnCreate class (android).

Tôi cũng đã thay đổi triển khai HttpClient thành AndroidClientHandler, cùng với việc thay đổi triển khai SSL/TLS thành 1.1. Cùng với việc thử điều này trên trình mô phỏng và thiết bị.

Có ai có lời khuyên nào không?

+1

Bạn có thể giải quyết vấn đề này không? Tôi chạy vào cùng một vấn đề và sửa đổi dự án Android đã làm việc cho tôi. Trong Tùy chọn Android> Nâng cao, tôi đặt triển khai HttpClient cho Android và SSL/TLS triển khai thành Native TLS 1.2+ – nthpixel

+0

Tôi cũng nhận được lỗi trên @Yanbin Hu giải pháp tốt và ngoài việc thay đổi cài đặt ứng dụng khách HTTP từ Mặc định thành Android gốc cũng đã thay đổi triển khai SSL/TLS từ Mặc định thành - Native TLS 1.2+ - sau đó nó hoạt động cho tôi. –

Trả lời

9

Hãy thử điều này: bất động sản mở Android dự án -> Android Options -> Advanced

Chuyển các HttpClient thực hiện thiết lập từ Mặc định để Android

Dường như xử lý khách hàng mặc định Mono bị hỏng cho HTTPS.

+1

Sẽ đề cập đến việc để lại HttpClient thực hiện như mặc định, và cập nhật TLS là 1,2+ làm việc cho tôi –

+0

Cả hai giải pháp đều làm việc cho tôi. Cảm ơn. – eddy

+0

Giải pháp tốt nhất. Tôi không biết tại sao những điều này cần phải được thực hiện. Đây có phải là tiêu chuẩn hoặc chỉ là một hack? –

Các vấn đề liên quan