2010-01-27 18 views
30

मैं निम्नलिखित कोड एक खिड़कियों सेवा में चल रहा है:WebClient उत्पन्न करता है (401) अनधिकृत त्रुटि

WebClient webClient = new WebClient(); 
webClient.Credentials = new NetworkCredential("me", "12345", "evilcorp.com"); 
webClient.DownloadFile(downloadUrl, filePath); 

हर बार, मैं निम्नलिखित भीतरी अपवाद के साथ निम्न अपवाद

{"The remote server returned an error: (401) Unauthorized."} 

मिलती है:

{"The function requested is not supported"} 

मुझे पता है कि प्रमाण पत्र मान्य हैं, असल में, अगर मैं अपने वेब ब्राउज में डाउनलोड यूआरएल में जाता हूं er और पासवर्ड 12345 के साथ badcorp.com \ me के रूप में मेरे प्रमाण पत्र में डाल दिया, यह ठीक डाउनलोड करता है।

अजीब बात यह है कि अगर मैं 12345 के साथ [email protected] के रूप में अपने प्रमाण पत्र निर्दिष्ट करता हूं, तो यह असफल प्रतीत होता है।

क्या प्रमाण पत्र प्रारूपित करने का कोई तरीका है?

+0

क्या आपने कभी इस मुद्दे के लिए समाधान (कोड) के साथ आया था? – Crash893

उत्तर

6

स्पष्ट रूप से ओएस आप मामलों पर चल रहे हैं, क्योंकि ओएस के बीच डिफ़ॉल्ट एन्क्रिप्शन बदल गया है। इस ब्लॉग में अधिक विवरण दिया गया है: http://ferozedaud.blogspot.com/2009/10/ntlm-auth-fails-with.html

जाहिरा तौर पर भी यहाँ stackoverflow पर चर्चा की गई: 407 Authentication required - no challenge sent

मैं ब्लॉग पहले पढ़ सुझाव देते हैं के रूप में आसुत ज्ञान नहीं है।

+3

..... या आप बस ब्रायन के उत्तर को – FastTrack

2

msdn docs के अनुसार अपवाद हो सकता है क्योंकि विधि को कई धागे पर एक साथ कहा गया है। डाउनलोडफाइल विधि को पूरी तरह से योग्य यूआरएल जैसे http://evilcorp.com/ की आवश्यकता है।

68

webClient.UseDefaultCredentials = true; मेरी समस्या का समाधान।

+0

से नीचे देख सकते हैं अधिकांश मामलों में इस सेटिंग की आवश्यकता है कि सर्वर को उपयोगकर्ता की पहचान जानकारी प्राप्त करने की आवश्यकता है, जैसे कि Windows प्रमाणीकरण को कॉन्फ़िगर करने वाली ASP.Net वेबसाइट। – lzlstyle

+4

ब्रायन अगर आप करीब थे तो मैं कसम खाता हूं कि मैं आपको अभी चुंबन दूंगा !! घंटों के लिए इस के साथ लड़ रहे थे और केवल इस सेटिंग को याद किया !? : -को धन्यवाद !! – KDT

+1

निश्चित रूप से मुझे भी मदद की। धन्यवाद ब्रायन – FastTrack

0

यूआरएल लिखते समय, यूआरएल स्ट्रिंग के सामने '@' डालें।

उदाहरण के लिए:

var url = @"http://evilcorp.com"; 
WebClient webClient = new WebClient(); 
webClient.Proxy = null; 
webClient.DownloadFile(new Uri(url), filePath); 

यह आपकी समस्या का समाधान होगा।

पी। ब्रायन.मेकी द्वारा दिए गए उत्तर भी सही हैं।

+4

आपके द्वारा दिए गए यूआरएल के लिए, @ चरित्र कोई फर्क नहीं पड़ता। – Dughall

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