2010-01-27 22 views
30

he el siguiente código se ejecuta en un servicio de Windows:cliente Web genera (401) de error no autorizado

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

Cada vez, me sale el siguiente excepción

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

con la siguiente excepción interna:

{"The function requested is not supported"} 

que sé con seguridad las credenciales son válidas, de hecho, si voy a downloadURL en mis cejas web er y poner mis credenciales como evilcorp.com \ me con la contraseña 12345, se descarga bien.

Lo que es extraño es que si especifico mis credenciales como [email protected] con 12345, parece que falla.

¿Hay alguna forma de formatear las credenciales?

+0

¿Alguna vez se le ocurrió una solución (código) para este problema? – Crash893

Respuesta

6

Aparentemente, el sistema operativo en el que se está ejecutando importa, ya que el cifrado predeterminado ha cambiado entre sistemas operativos. Este blog tiene más detalles: http://ferozedaud.blogspot.com/2009/10/ntlm-auth-fails-with.html

Esto también parece haber sido discutidos en StackOverflow aquí: 407 Authentication required - no challenge sent

que sugeriría leer el blog por primera vez como el conocimiento destilada está allí.

+3

..... o simplemente podría mirar la respuesta de Brian justo debajo de – FastTrack

2

Según el msdn docs, la excepción podría deberse a que el método se ha llamado simultáneamente en varios hilos. El método DownloadFile también requiere una URL completamente calificada como http://evilcorp.com/.

68

webClient.UseDefaultCredentials = true; resolvió mi problema.

+0

La mayoría de los casos necesita esta configuración para que el servidor necesite obtener información de identificación del usuario, como el sitio web ASP.Net que configura la autenticación de Windows. – lzlstyle

+4

Brian si estuvieras más cerca te juro que te habría besado ahora mismo !! Estuve luchando con esto durante horas y solo perdí esta configuración? :-¡¡o gracias!! – KDT

+1

Definitivamente me ayudó también. Gracias Brian – FastTrack

0

Mientras escribe una URL, coloque la '@' delante de la url.

Por ejemplo:

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

Esto va a resolver su problema.

La respuesta dada por P.Brian.Mackey también es correcta.

+4

Para la URL que ha proporcionado, el carácter @ no tendrá ninguna importancia. – Dughall

Cuestiones relacionadas