WebClient генерирует (401) Несанкционированная ошибка
У меня есть следующий код, запущенный в службе Windows:
WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential("me", "12345", "evilcorp.com");
webClient.DownloadFile(downloadUrl, filePath);
Каждый раз я получаю следующее исключение
{"The remote server returned an error: (401) Unauthorized."}
Со следующим внутренним исключением:
{"The function requested is not supported"}
Я точно знаю, что учетные данные действительны, на самом деле, если я перейду в downloadUrl в своем веб-браузере и поставлю свои учетные данные как evilcorp.com\me с паролем 12345, он загрузится нормально.
Что странно, так это то, что если я укажу свои учетные данные как [email protected] с 12345, он, похоже, терпит неудачу.
Есть ли способ форматировать учетные данные?
Ответы
Ответ 1
По-видимому, ОС, на которой вы работаете, по умолчанию, поскольку шифрование по умолчанию изменилось между ОС.
Этот блог содержит более подробную информацию: http://ferozedaud.blogspot.com/2009/10/ntlm-auth-fails-with.html
Это, по-видимому, также обсуждалось здесь в stackoverflow: 407 Требуется аутентификация - не отправлено вызов
Я бы посоветовал сначала прочитать блог, поскольку там есть дистиллированное знание.
Ответ 2
webClient.UseDefaultCredentials = true;
разрешил мою проблему.
Ответ 3
В соответствии с msdn docs исключение может быть вызвано тем, что метод был вызван одновременно на нескольких потоках. Для метода DownloadFile требуется полный URL-адрес, например http://evilcorp.com/.
Ответ 4
При написании URL, поставьте '@' перед строкой url.
Например:
var url = @"http://evilcorp.com";
WebClient webClient = new WebClient();
webClient.Proxy = null;
webClient.DownloadFile(new Uri(url), filePath);
Это решит вашу проблему.
Ответ, данный P.Brian.Mackey, также верен.