2010-01-27 7 views
30

Ho il seguente codice in esecuzione in un servizio di Windows:WebClient genera (401) errore Unauthorized

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

Ogni volta, ottengo la seguente eccezione

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

con la seguente eccezione interna:

{"The function requested is not supported"} 

So per certo che le credenziali sono valide, infatti, se vado a scaricareUrl nelle mie pagine web er e inserire le mie credenziali come evilcorp.com \ me con password 12345, si scarica bene.

Ciò che è strano è che se si specificano le mie credenziali come [email protected] con 12345, sembra non funzionare.

C'è un modo per formattare le credenziali?

+0

Hai mai trovato una soluzione (codice) per questo problema? – Crash893

risposta

6

Apparentemente il sistema operativo in uso, poiché la crittografia predefinita è cambiata tra i sistemi operativi. Questo blog ha più dettagli: http://ferozedaud.blogspot.com/2009/10/ntlm-auth-fails-with.html

Questo ha apparentemente stato anche discusso su StackOverflow qui: 407 Authentication required - no challenge sent

vorrei suggerire leggere il blog in primo luogo come la conoscenza distillata è lì.

+3

..... o si potrebbe semplicemente guardare la risposta di Brian appena sotto – FastTrack

2

Secondo l'msdn docs l'eccezione potrebbe essere perché il metodo è stato chiamato contemporaneamente su più thread. Il metodo DownloadFile richiede anche un URL completo come http://evilcorp.com/.

68

webClient.UseDefaultCredentials = true; risolto il problema.

+0

La maggior parte dei casi ha bisogno di questa impostazione è che il server deve ottenere informazioni di identificazione dell'utente, come il sito Web ASP.Net che configura l'autenticazione di Windows. – lzlstyle

+4

Brian, se fossi più vicino giuro che ti avrei baciato adesso !! State combattendo con questo per ore e avete perso solo questa impostazione !? : -o GRAZIE !! – KDT

+1

Sicuramente mi ha aiutato anche io. Grazie Brian – FastTrack

0

Durante la scrittura di un URL, inserire "@" davanti alla stringa dell'URL.

Ad esempio:

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

Questo risolverà il vostro problema.

La risposta fornita da P.Brian.Mackey è corretta.

+4

Per l'URL che hai fornito, il carattere @ non farà alcuna differenza. – Dughall