Создание веб-запроса к веб-странице, требующей проверки подлинности Windows

Я пытаюсь сделать запрос к веб-странице, используя класс WebRequest в .net. URL, который я пытаюсь прочитать, требует аутентификации Windows, из-за которой я получаю несанкционированное исключение. Как я могу передать учетные данные Windows этому запросу, чтобы он мог аутентифицироваться.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" );

request.Method = "GET";
request.UseDefaultCredentials = false;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "username", "password", "domain" );

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception

this.Response.Write( response.StatusCode );

Приведенный выше код возвращает следующую ошибку.

System.Net.WebException: The remote server returned an error: (401) Unauthorized.

При проверке сведений об исключении я заметил одну вещь: URL, к которому я пытаюсь получить доступ, перенаправляет на другой URL, который побуждает меня предоставить данные для входа в NT. Я считаю, что учетные данные должны быть также перенаправлены на этот URL. Но, видимо, этого не происходит.

35
задан Hemanshu Bhojak 26 August 2010 в 07:48
поделиться

2 ответа

Я пытаюсь получить доступ к ссылке Передача учетных данных Windows. Затем ссылка A автоматически перенаправляет меня на ссылку B, но не передает учетные данные Windows, которые я предоставил. Отсюда ошибка. Я сделал request.AutoRedirect = false и зацикливался каждый раз, когда я получаю местоположение в заголовке, т.е. я выполняю перенаправления вручную каждый раз, передавая учетные данные Windows.

Мне помогло :)

9
ответ дан 27 November 2019 в 07:05
поделиться

Вы должны использовать свойство Credentials для передачи учетных данных Windows в веб-службу.

Если вы хотите передать сервису учетные данные текущего пользователя Windows, то

request.Credentials = CredentialCache.DefaultCredentials;

должен помочь. В противном случае используйте NetworkCredential следующим образом:

request.Credentials = new NetworkCredential(user, pwd, domain);
40
ответ дан 27 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: