Во-первых, запрос к URL в Chrome работает. Он запрашивает у меня имя пользователя и пароль, я ввожу его и отображает страницу (это запрос OData).
Обновление: Код работает сейчас. Он работал в прошлом по тому же URL и работал на других, когда я столкнулся с этой проблемой. Но в течение некоторого времени это не сработало в моей системе. Я оставляю этот вопрос на всякий случай, если у кого-то есть предложения по изменениям, которые я должен внести в приведенный ниже код.
Но следующий код завершается с 401:
WebRequest request = WebRequest.Create(url);
HttpWebRequest webRequest = request as HttpWebRequest;
webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
var credentials = new NetworkCredential(username, password);
var credentialCache = new CredentialCache();
Uri uri = new Uri(url);
Uri site = new Uri(uri.GetLeftPart(UriPartial.Authority));
credentialCache.Add(site, "Negotiate", credentials);
credentialCache.Add(site, "Digest", credentials);
credentialCache.Add(site, "Basic", credentials);
credentialCache.Add(new Uri(url), "NTLM", credentials);
request.Credentials = credentialCache;
// this throws the exception
return request.GetResponse();
Выдает:
System.Net.WebException HResult = 0x80131509 Сообщение = Удаленный
сервер вернул ошибку: (401) не авторизован. Источник = System
StackTrace: в System.Net.HttpWebRequest.GetResponse () в
WindwardReportsDrivers.net.windward.AccessProviders.protocols.AllHttpAccessProvider.Request (String
URL, учетные данные NetworkCredential, IDictionary 2 headers,
Dictionary
2 allProps) в
C: \ мерзавец \ Jenova \ двигатель \ DotNetEngine \ WindwardReportsDrivers \ сети \ наветренной \ AccessProviders \ протоколы \ AllHttpAccessProvider.cs: линия
108