Запрос https (OData) с браузером работает, c # WebRequest завершается с 401 - PullRequest
0 голосов
/ 23 января 2019

Во-первых, запрос к 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

...