2017-01-25 12 views
5

का उपयोग कर मैं सीख रहा हूं कि सी # के साथ xamarin का उपयोग कैसे करें, और मुझे एक बाहरी एपीआई में वेब अनुरोध करने के लिए एंड्रॉइड ऐप मिला है और मुझे निम्न त्रुटि मिल रही है;Xamarin में WebException, 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. 

मेरा कोड निम्नानुसार है;

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); 
    } 

एंड्रॉइड में मेनक्लास कोर क्लास को कॉल करता है, जो इस सेवा वर्ग को कॉल करता है।

एचटीपी क्लाइंट अनुरोध करता है जब एपीआई HTTPS का उपयोग नहीं करता है, लेकिन जब भी मैं एक एपीआई का उपयोग करता हूं जिसमें HTTPS सक्षम है तो यह त्रुटि फेंकता है।

मैं कोड स्टोर करने के लिए पोर्टेबल क्लास लाइब्रेरी का भी उपयोग कर रहा हूं, इसलिए वेब अनुरोधों के लिए HttpWebRequest का उपयोग करना संभव नहीं है।

मैंने भी कोशिश की है;

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

और;

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

मेरे आवेदन ऑनक्रेट क्लास (एंड्रॉइड) में।

मैंने एसएसएल/टीएलएस कार्यान्वयन को 1.1 में बदलने के साथ एंड्रॉइड क्लाइंटहैंडलर को एचटीपी क्लाइंट कार्यान्वयन भी बदल दिया है। एक एमुलेटर और डिवाइस पर इसका प्रयास करने के साथ-साथ।

क्या किसी के पास कोई सलाह है?

+1

क्या आप इसे हल करने में सक्षम थे? मैं एक ही मुद्दे में भाग गया और एंड्रॉइड प्रोजेक्ट को संशोधित करने के लिए मेरे लिए काम किया। एंड्रॉइड विकल्प> उन्नत के तहत, मैंने एंड्रॉइड और एसएसएल/टीएलएस कार्यान्वयन को एंड्रॉइड और एसएसएल/टीएलएस कार्यान्वयन को मूल टीएलएस 1.2+ – nthpixel

+0

पर सेट किया है, मुझे त्रुटि से ऊपर भी मिल रहा है @ यानबिन हू अच्छा समाधान और HTTP क्लाइंट कार्यान्वयन को डिफॉल्ट से एंड्रॉइड मूल में बदलने के अलावा एसएसएल/टीएलएस कार्यान्वयन को डिफ़ॉल्ट से - मूल टीएलएस 1.2+ में बदल दिया - फिर यह मेरे लिए काम किया। –

उत्तर

9

इस प्रयास करें: ओपन एंड्रॉयड परियोजना संपत्ति -> एंड्रॉयड विकल्प -> उन्नत

स्विच HttpClient कार्यान्वयन से सेटिंग डिफ़ॉल्टएंड्रॉयड को

ऐसा लगता है कि डिफ़ॉल्ट मोनो ग्राहक हैंडलर HTTPS के लिए टूटा हुआ है।

+1

का उल्लेख है कि एचटीपी क्लाइंट कार्यान्वयन को डिफ़ॉल्ट रूप से छोड़कर, और टीएलएस को 1.2+ के लिए अपडेट करने के लिए मेरे लिए काम किया –

+0

दोनों समाधान मेरे लिए काम करते थे। धन्यवाद। – eddy

+0

बेस्ट समाधान। मुझे नहीं पता कि इन चीजों को क्यों किया जाना चाहिए। क्या यह मानक एक या सिर्फ एक हैक है? –