Hacer una solicitud web a una página web que requiere autenticación de Windows

Estoy tratando de hacer una solicitud a una página web usando la clase WebRequest en .net. La URL que estoy tratando de leer requiere la Autenticación de Windows debido a que recibo una excepción no autorizada. ¿Cómo puedo pasar las credenciales de Windows a esta solicitud para que pueda autenticarse?

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" ); request.Method = "GET"; request.UseDefaultCredentials = false; request.PreAuthenticate = true; request.Credentials = new NetworkCredential( "username", "password", "domain" ); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception this.Response.Write( response.StatusCode ); 

El código anterior devuelve el siguiente error.

 System.Net.WebException: The remote server returned an error: (401) Unauthorized. 

Me di cuenta de una cosa al verificar los detalles de la excepción es que la url que estoy tratando de acceder está redirigiendo a una url diferente que me está pidiendo que proporcione los detalles de inicio de sesión de NT. Creo que las credenciales también deben ser enviadas a esta url. Pero aparentemente no está sucediendo.

Debe usar la propiedad Credentials para pasar las credenciales de Windows al servicio web.

Si desea pasar las credenciales del usuario actual de Windows al servicio, entonces

 request.Credentials = CredentialCache.DefaultCredentials; 

debería hacer el truco. De lo contrario, use NetworkCredential de la siguiente manera:

 request.Credentials = new NetworkCredential(user, pwd, domain); 

Estoy tratando de acceder a un enlace A pasando las credenciales de Windows. El Enlace A luego me redirige al enlace B automáticamente pero no pasa las credenciales de Windows que había proporcionado. De ahí el error. Solicité. AutoRedirect = false, y realicé un bucle cada vez que obtengo ubicación en el encabezado, es decir, hago mis redireccionamientos manuales cada vez que paso las credenciales de Windows.

Esto funcionó para mí 🙂

Para autenticarse en WebService, use DefaultNetworkCredentials en lugar de DefaultCredentials:

 request.Credentials = CredentialCache.DefaultNetworkCredentials; 

Usando VS2015, request.UseDefaultCredentials = true; ¡funciona para mi!