Добавление заголовков и публикация данных в RESTfull / HTTP-запрос в C # - PullRequest
18 голосов
/ 03 августа 2011

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

  1. Сделайте POST-запрос с именем пользователя / паролем и получите токен
  2. Используйте этот токен взаголовок (Authorization: TOKEN) при выполнении других запросов GET / POST / PUT

Я использую WebRequest для выполнения запросов GET (с заголовком Authorization), и он работает.Но когда я использую следующий код для выполнения запросов 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запрос.Так что я делаю не так?

Спасибо.

1 Ответ

10 голосов
/ 10 октября 2011

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

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

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

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

...