Использует ли сервер базовую аутентификацию HTTP или какой-либо другой тип? Если он использует HTTP basic, вы можете установить для свойства Credentials
веб-запроса учетные данные, содержащие правильное имя пользователя и пароль, и установить для свойства PreAuthenticate
значение true.
Вот пример (он не тестировался, поэтому используйте его только в качестве руководства):
var uri = new Uri("https://somesite.com/something");
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Credentials = new NetworkCredential("myUserName","myPassword");
request.PreAuthenticate = true;
var response = request.GetResponse();
Примечание. По моему опыту, в .NET Framework наблюдается странное поведение. Вы могли бы подумать, что он должен делать то, что говорит код, но на самом деле он делает это:
- Отправить запрос на сервер без учетных данных
- Сервер отвечает 401
- Повторно отправить запрос с предоставленными вами учетными данными
- Сервер принимает запрос.
Я понятия не имею, почему он это сделал, так как кажется, что он сломан, так что, возможно, это была изюминка моей машины и, возможно, с тобой этого не случится.
Если ваше приложение не чувствительно к производительности и ваши запросы не являются сообщениями больших данных, вы, вероятно, не заметите, но чтобы обойти это, мне пришлось вручную создать заголовок базовой аутентификации HTTP и установить его на HttpWebRequest
вручную, манипулируя коллекцией Headers
.