2017-01-25 1 views
5

J'apprends comment utiliser xamarin avec C#, et j'ai une application android pour faire des requêtes web à une API externe et je reçois l'erreur suivante;WebException dans Xamarin, en utilisant 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. 

Mon code est le suivant; La classe MainClass dans android appelle la classe de base, qui appelle cette classe de service.

Les requêtes HttpClient fonctionnent lorsque l'API et non utilise HTTPS, mais renvoie cette erreur chaque fois que j'utilise une API sur laquelle HTTPS est activé.

J'utilise également une bibliothèque de classes portable pour stocker du code, donc l'utilisation de HttpWebRequest pour les requêtes Web n'est pas possible.

J'ai aussi essayé;

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

Et;

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

Dans mon application classe OnCreate (android).

J'ai également changé l'implémentation de HttpClient en AndroidClientHandler, en changeant l'implémentation de SSL/TLS en 1.1. Avec essayer cela sur un émulateur et un appareil.

Quelqu'un a-t-il des conseils?

+1

Avez-vous pu résoudre ce problème? J'ai rencontré le même problème et la modification du projet Android a fonctionné pour moi. Sous Android Options> Avancé, j'ai mis l'implémentation HttpClient à Android et l'implémentation SSL/TLS à Native TLS 1.2+ – nthpixel

+0

Je recevais aussi la même erreur ci-dessus @Yanbin Hu bonne solution et en plus de changer l'implémentation du client HTTP de Default à Android natif aussi modification de l'implémentation SSL/TLS de la valeur par défaut à - Native TLS 1.2+ - alors cela a fonctionné pour moi. –

Répondre

9

Essayez ceci: ouvert Android propriété de projet -> Options Android -> Avancé

Passer la HttpClient mise en œuvre cadre de par défaut à Android

Il semble que le défaut Mono gestionnaire client est cassé pour HTTPS.

+1

Mentionnera que quitter HttpClient Implémentation par défaut, et mettre à jour TLS pour être 1.2+ a fonctionné pour moi –

+0

Les deux solutions ont fonctionné pour moi. Merci. – eddy

+0

Meilleure solution. Je ne sais pas pourquoi ces choses doivent être faites. Est-ce standard ou juste un hack? –