System.Net.WebClient странно выходит из строя - PullRequest
12 голосов
/ 27 апреля 2009

Я пытаюсь загрузить некоторые данные из экземпляра служб отчетов на наш сервер TFS.
Учитывая, что код должен выполняться на компьютере, который не присоединен к домену, я решил, что сам установлю учетные данные. Не повезло, получил HTTP 401 Несанкционированный обратно. Итак, я подключил Fiddler, чтобы посмотреть, что происходит.

Но вот когда я получил Heisenberged - звонок теперь прошел без помех. Таким образом, аутентификация проходит с подключенным Fiddler, но без него не удается. Веб-клиент сломан или я что-то упустил здесь?

private void ThisWorksWhenDomainJoined()
    {
        WebClient wc = new WebClient();
        wc.Credentials = CredentialCache.DefaultNetworkCredentials;
        wc.DownloadString("http://teamfoundationserver/reports/........");  //Works
    }

    private void ThisDoesntWork()
    {
        WebClient wc = new WebClient();
        wc.Credentials = new NetworkCredential("username", "password", "domain");
        wc.DownloadString("http://teamfoundationserver/reports/........");  //blows up wih HTTP 401
    }

Ответы [ 4 ]

4 голосов
/ 29 ноября 2009

Взгляните на эту ссылку:
HTTP-авторизация и .NET WebRequest, классы веб-клиентов

У меня была такая же проблема, как и у вас. Я только добавил одну строку, и она начала работать. Попробуйте это

private void ThisDoesntWork()
    {
        WebClient wc = new WebClient();
        wc.Credentials = new NetworkCredential("username", "password", "domain");
        //After adding the headers it started to work !
        wc.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        wc.DownloadString("http://teamfoundationserver/reports/........");  //blows up wih HTTP 401
    }
2 голосов
/ 16 июня 2009

Попробуйте это ...

var credCache = new CredentialCache();
credCache.Add(new Uri("http://teamfoundationserver/reports/........""),
                      "Basic", 
                      new NetworkCredential("username", "password", "DOMAIN"));
wc.Credentials = credCache;

Если это не сработает, попробуйте заменить «Basic» на «Negotiate».

1 голос
/ 08 декабря 2011

Мне удалось обойти эту ошибку с помощью объекта CredentialCache следующим образом:

WebClient wc = new WebClient();
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri("http://mydomain.com/"), "Basic",
new NetworkCredential("username", "password"));

wc.Credentials = credCache;

wc.DownloadString(queryString));
1 голос
/ 16 июня 2009

Что происходит, когда вы используете это?

wc.Credentials = CredentialCache.DefaultCredentials;

Кроме того, вы уверены, что у вас есть правильное имя пользователя, пароль и домен?

Кроме того: мне интересно, меняется ли Fiddler вокруг некоторых символов Юникода, когда .net ломает их или что-то подобное. Если ваш пользователь / пароль / домен имеет юникод, попробуйте экранировать его как "\u2638" вместо "☺".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...