J'essaie de faire une demande à une page Web en utilisant la classe WebRequest en .net. L'URL que j'essaie de lire nécessite une authentification Windows en raison de laquelle j'obtiens une exception non autorisée. Comment puis-je transmettre des informations d'identification Windows à cette demande afin qu'elle puisse s'authentifier.
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 );
Le code ci-dessus renvoie l'erreur suivante.
System.Net.WebException: The remote server returned an error: (401) Unauthorized.
J'ai remarqué une chose lors de la vérification des détails de l'exception, c'est que l'URL à laquelle j'essaie d'accéder redirige vers une URL différente qui m'invite à fournir les informations de connexion NT. Je crois que les pouvoirs devraient également être transmis à cette URL. Mais apparemment, cela ne se produit pas.
J'essaie d'accéder à un lien A en passant les informations d'identification Windows. Le lien A me redirige ensuite vers le lien B automatiquement mais ne transmet pas les informations d'identification Windows que j'avais fournies. D'où l'erreur. J'ai demandé. AutoRedirect = false, et parcouru chaque fois que j'obtiens l'emplacement dans l'en-tête, c'est-à-dire que je fais mes redirections manuellement chaque fois en passant les informations d'identification Windows.
Cela a fonctionné pour moi :)
Vous devez utiliser la propriété Credentials pour transmettre les informations d'identification Windows au service Web.
Si vous souhaitez transmettre les informations d'identification de l'utilisateur Windows actuel au service,
request.Credentials = CredentialCache.DefaultCredentials;
devrait faire l'affaire. Sinon, utilisez NetworkCredential comme suit:
request.Credentials = new NetworkCredential(user, pwd, domain);
Pour l'authentification auprès du service Web, utilisez DefaultNetworkCredentials au lieu de Default Credentials:
request.Credentials = CredentialCache.DefaultNetworkCredentials;
Avec VS2015, request.UseDefaultCredentials = true;
travaille pour moi!