2010-09-13 16 views
2

Il existe un fichier Web dans mon intranet que mon ordinateur est autorisé à lire et à écrire. Je peux ouvrir IE ou Firefox et voir le fichier en tapant int l'adresse url. J'ai besoin d'écrire une application de bureau C# qui lit/écrit dans ce fichier. Même si mon ordinateur a accès, toutes mes tentatives jusqu'à présent aboutissent à 401, des erreurs d'accès non autorisées. Le programme doit fonctionner à partir de n'importe quel ordinateur dont le compte a été autorisé, donc je ne peux pas coder en dur n'importe quel nom d'utilisateur/mot de passe. Je ne l'ai jamais fait quelque chose comme ça, mais j'ai pu grappiller ce qui suit de plusieurs sites:C# WebRequest return 401

WebRequest objRequest = HttpWebRequest.Create("https://site.com/file"); 
objRequest.Credentials = CredentialCache.DefaultNetworkCredentials; 
objRequest.Proxy = WebRequest.DefaultWebProxy; 
objRequest.Proxy.Credentials = CredentialCache.DefaultCredentials; 

WebResponse objResponse = (WebResponse)objRequest.GetResponse(); 

using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) 
{ 
    string str = sr.ReadToEnd(); 
    sr.Close(); 
    //... Do stuff with str 
} 

Si cela importe, je travaille dans .NET 2.0

+0

Est-ce que c'est gagner des formulaires ou asp.net? – st78

+0

Est-ce un site IIS que vous essayez de lui transmettre les informations d'identification Windows NTLM? – CodingGorilla

+0

Je crée un formulaire de victoire. – user108088

Répondre

0

Avez-vous essayez d'utiliser Fiddler inspecter la demande réelle qui a été envoyée au serveur? Vous pouvez également vérifier si le serveur nécessite un certificat client pour autoriser la connexion.

Puisque vous accédez à un serveur intranet, avez-vous vraiment besoin de définir la partie proxy? Je veux dire la plupart du temps, le proxy est configuré pour ignorer les adresses locales de toute façon.

0

Cela ne fonctionnera pas si les informations d'identification NTLM sont nécessaires:

objRequest.Credentials = CredentialCache.DefaultNetworkCredentials; 

Vous devez passer les pouvoirs réels tels que:

NetworkCredential networkCredential = new NetworkCredential(UserName, Password, Domain); 
CredentialCache credCache = new CredentialCache(); 
credCache.Add(new Uri(url), "NTLM", networkCredential); 
objRequest.Proxy.Credentials = credCache; 
3

Je viens de croiser le même problème, tout a commencé à travailler quand j'ai ajouté:

objRequest.UseDefaultCredentials = true;