2016-06-02 10 views
2

Попытка отправить веб-запрос с некоторым содержимым тела. Важная часть состоит в том, что мне нужны некоторые данные в теле почтового запроса. Мое понимание того, как это сделать, - открыть WebRequestStream, а затем записать в него байты, а затем закрыть его. Это должно быть просто. Вот мой код:C# HttpWebRequest.Write не отправляет контент

 HttpWebRequest request; 
     request = (HttpWebRequest)WebRequest.Create("http://localhost:50203/api/Values");// 

     request.Method = "POST"; 
      byte[] requestBody = ASCIIEncoding.ASCII.GetBytes(HttpUtility.UrlEncode("grant_type=client_credentials")); 
      Stream requestBodyStream = request.GetRequestStream(); 
      requestBodyStream.Write(requestBody, 0, requestBody.Length); 
      requestBodyStream.Flush(); 
      requestBodyStream.Close(); 
      WebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream dataStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(dataStream); 
      myString = reader.ReadToEnd(); 

Но метод RequestBodyStream.Write не отправляет ничего в тело. Я знаю это, потому что я запускаю серверную программу на другом конце.

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

Я понимаю, что закрытие потока - это то, что передает фактические данные. Я также попытался добавить к потоку метод Flush().

Почему этот метод не производит никакого тела?

+0

Ваша конечная точка выглядит asp.net Web API. Этот маршрут контроллера GET или это конечная точка POST? – Crowcoder

+0

@Crowcoder Если бы это не была конечная точка POST, у него получилось бы исключение в клиенте – yonisha

+0

Возможный дубликат [Настройка данных тела WebRequest] (http://stackoverflow.com/questions/4256136/setting-a-webrequests -body-data) – yonisha

ответ

0

Add 'ТипСодержимого' и заголовки '' ContentLength к экземпляру запроса:

request.ContentType = "application/json"; // Or whatever you want 
request.ContentLength = requestBody.Length;