22

एक स्वादिष्ट API तक पहुंचने के लिए HttpClient क्लास का उपयोग करते समय मुझे कुछ समस्याएं आ रही हैं।सी # में एचटीपी क्लाइंट में क्रेडेंशियल्स का उपयोग कैसे करें?

try 
{ 
    const string uriSources = "https://api.del.icio.us/v1/tags/bundles/all?private={myKey}"; 
    using (var handler = new HttpClientHandler { Credentials = new 
          NetworkCredential("MyUSER", "MyPASS") }) 
    { 
     using (var client = new HttpClient(handler)) 
     { 
      var result = await client.GetStringAsync(uriSources); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message, "ERROR...", MessageBoxButton.OK); 
} 

कोड चल रहा जब ऊपर मैं निम्नलिखित हो रही है: प्रतिसाद स्थिति कोड सफलता का संकेत नहीं है: 401 (अनधिकृत) मैं निम्नलिखित कोड है।

तो, मैं यह काम कैसे प्राप्त कर सकता हूं? क्या यह संभव है?

अग्रिम धन्यवाद

सम्मान!

+0

401 अनधिकृत का मतलब है गलत उपयोगकर्ता नाम या पासवर्ड ... – Raptor

+0

मुझे पता है, फिर भी मैं सही लोगों ;-) – MikePR

+0

उपयोग कर रहा हूँ जब मैं किसी भी ब्राउज़र में ऊपर यूआरएल डाल यह (credencial के लिए मुझसे पूछते ही मैं उपयोग कर रहा हूँ कोड में) और यह काम करता है। तो, मुझे लगता है कि यह तरीका है कि httpClient डेटा – MikePR

उत्तर

0

जो कोड आप दिखा रहे हैं वह मेरे लिए प्रमाणित संसाधन के विरुद्ध काम करता है। मुझे संदेह है कि स्वादिष्ट कुछ अजीब कर रहा है।

ध्यान दें कि आप विंडोज फोन पर हैं, फिडलर के साथ डीबग करना एक दर्द है, इसलिए मेरा सुझाव है कि Runscope खाता प्राप्त हो रहा है। यह message handler इंस्टॉल करें जो आपके अनुरोध को रनस्कोप डीबगर के माध्यम से रीडायरेक्ट करेगा। एक बार ऐसा करने के बाद, मेरा सुझाव है कि आप www- प्रमाणीकृत शीर्षलेख देखें और जांचें कि क्या लौट रहा है।

यदि अन्य सभी विफल हो जाते हैं तो आप हमेशा मूल प्रमाणीकरण प्रमाण-पत्र के साथ प्रमाणीकरण शीर्षलेख सेट कर सकते हैं। आपको प्रमाण पत्र वर्ग का उपयोग करने की आवश्यकता नहीं है।

29

मुझे एक ही समस्या थी। ऐसा लगता है कि HttpClientHttpClientHandler में निर्धारित प्रमाण-पत्रों की उपेक्षा करता है।

निम्नलिखित तथापि काम करेगा:

using System.Net.Http.Headers; // For AuthenticationHeaderValue 

const string uri = "https://example.com/path?params=1"; 
using (var client = new HttpClient()) { 
    var byteArray = Encoding.ASCII.GetBytes("MyUSER:MyPASS"); 
    var header = new AuthenticationHeaderValue(
       "Basic", Convert.ToBase64String(byteArray)); 
    client.DefaultRequestHeaders.Authorization = header; 

    var result = await client.GetStringAsync(uri); 
} 

हैंडलर के लिए कोई ज़रूरत नहीं।

स्रोत: http://www.snip2code.com/Snippet/13895/Simple-C---NET-4-5-HTTPClient-Request-Us

+3

यह समाधान अच्छी तरह से काम करता है क्योंकि यह प्राधिकरण शीर्षलेख को पहले अनुरोध पर सेट करने की अनुमति देता है, इस प्रकार 401 चुनौती/प्रतिक्रिया को छोड़कर। HttpClient और HttpClientHandler के साथ मेरे अनुभव में, हालांकि, प्री-प्रमाणीकरण सेटिंग में काम करता है कि 401 चुनौती/प्रतिक्रिया पूर्ण होने के बाद प्राधिकरण शीर्षलेख प्रत्येक अनुरोध पर सेट होता है। यह आलेख यहां इसे अच्छी तरह से समझाता है: http://weblog.west-wind.com/posts/2010/Feb/18/NET-WebRequestPreAuthenticate-not-quite-what-it-sounds-like – Philippe

+2

@Adam Szabo [this] (https://gist.github.com/bryanbarnard/8102915) मूल स्रोत – superjos

1

यह एक पुरानी पोस्ट है, लेकिन किसी ने वही समस्या और ब्राउज़िंग जवाब का सामना करना पड़ के लिए मेरा जवाब जोड़ने के लिए सोचा था ...

मैं वही समस्या का सामना करना पड़ा। मेरे मामले में, NetworkCredentials के लिए डोमेन प्रॉपर्टी सेट करना काम करता है। आप डोमेन सेट करने का प्रयास कर सकते हैं।

+0

लगता है बहुत अच्छा निर्वाण भाई – SPatel

संबंधित मुद्दे