25
Próbuję uzyskać źródło HTML strony internetowej za pośrednictwem kodu C#. Kiedy uzyskać dostęp do witryny z uwierzytelniania systemu Windows następujący kod działa:Poświadczenia domeny dla klasy WebClient nie działają
using (WebClient client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
using (Stream stream = client.OpenRead("http://intranet/"))
using (StreamReader reader = new StreamReader(stream))
{
MessageBox.Show(reader.ReadToEnd());
}
}
kiedy ręcznie wprowadzić swoje poświadczenia domeny pojawia się komunikat „nieuwierzytelniony”:
using (WebClient client = new WebClient())
{
NetworkCredential credentials = new NetworkCredential("username", "pass", "domain");
client.Credentials = credentials;
using (Stream stream = client.OpenRead("http://intranet/"))
using (StreamReader reader = new StreamReader(stream))
{
MessageBox.Show(reader.ReadToEnd());
}
}
Dlaczego tak jest?
prace, dzięki, żadnych wyjaśnień? – agnieszka
Musisz określić typ uwierzytelniania. Kiedy serwer wyzywa klienta z uwierzytelnianiem NTLM, metoda ICredentials.GetCredential zostanie wywołana w WebClient.Credentials z 'authType =" NTLM "'. Jeśli użyłeś 'WebClient.Credential = new NetworkCredential (...)' ponieważ nie określono typu uwierzytelniania, klient nie będzie w stanie odpowiedzieć poprawnie. 'CredentialCache' już implementuje tę funkcjonalność. –
Co powinienem podać w Uri? Zasób, który próbuję uzyskać, to "https://myDomain.com/images/userName". Czy możesz podać dowolny przykład na żywo, jak powinny wyglądać Uri i NetworkCredentials? Thx –