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?
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
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. –