Подтвердить что ты не робот

Добавление заголовков и данных в RESTfull/HTTP-запрос в С#

У меня возникают проблемы с отправкой запроса POST на С#, и, похоже, я неправильно понял некоторые основы HTTP. Поэтому в основном я реализую RESTfull-сервис клиент, который работает следующим образом:

  • Сделать запрос POST с именем пользователя/паролем и получить токен
  • Используйте этот токен в заголовке (авторизация: TOKEN), делая другие запросы GET/POST/PUT

Я использую WebRequest для создания запросов GET (с заголовком авторизации), и он работает. Но когда я использую следующий код для выполнения запросов PUT, служба возвращает сообщение "Ошибка аутентификации - не вошло в систему":

String url = String.Format("{0}/{1}", AN_SERVER, app);
WebRequest theRequest = WebRequest.Create(url);
theRequest.Method = "POST";

theRequest.ContentType = "text/x-json";
theRequest.ContentLength = json.Length;
Stream requestStream = theRequest.GetRequestStream();

requestStream.Write(Encoding.ASCII.GetBytes(json), 0, json.Length);
requestStream.Close();


theRequest.Headers.Add("Authorization", authToken);

HttpWebResponse response =  (HttpWebResponse)theRequest.GetResponse();

Я должен делать небольшую ошибку (по крайней мере, я надеюсь) при отправке запроса POST. Так что я делаю неправильно?

Спасибо.

4b9b3361

Ответ 1

Перемещение заголовков до того, как запрос будет работать (согласно AI W comment), поскольку поток запросов добавляет тело.

Способ, которым webrequest реализован внутри, вам нужно закончить заголовок перед написанием тела и после его формата в потоке его готов к отправке.

Если вы посмотрите на реализацию webrequest в отражателе или какой-нибудь такой инструмент для декомпиляции, вы сможете увидеть логику.

Надеюсь, что это поможет