C # WebRequest возвращает 401 - PullRequest
       42

C # WebRequest возвращает 401

2 голосов
/ 13 сентября 2010

В моей внутренней сети есть веб-файл, который мой компьютер имеет право на чтение и запись. Я могу открыть IE или Firefox и просмотреть файл, введя int URL-адрес. Мне нужно написать настольное приложение на C #, которое читает / пишет в этот файл. Несмотря на то, что мой компьютер имеет доступ, все мои попытки до сих пор приводят к 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
}

Если это имеет значение, я работаю в .NET 2.0

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011

Просто столкнулся с той же проблемой, все начало работать, когда я добавил:

objRequest.UseDefaultCredentials = true;
0 голосов
/ 11 февраля 2011

Это не будет работать, если требуются учетные данные NTLM:

objRequest.Credentials = CredentialCache.DefaultNetworkCredentials;

Вам необходимо передать действительные учетные данные, такие как:

NetworkCredential networkCredential = new NetworkCredential(UserName, Password, Domain);
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(url), "NTLM", networkCredential);
objRequest.Proxy.Credentials = credCache;
0 голосов
/ 14 сентября 2010

Вы пытались использовать Fiddler для проверки фактического запроса, который был отправлен на сервер? Вы также можете проверить, требуется ли серверу сертификат клиента для разрешения соединения.

Поскольку вы обращаетесь к серверу интрасети, вам действительно нужно установить прокси-часть? Я имею в виду, что в большинстве случаев прокси-сервер настроен на игнорирование локальных адресов.

...