EnderCode
EnderCode

Reputation: 235

How to send a post request with array of strings in the body

I'm trying to send and http post request in a console app with an array if string in the body, but its not working.

Here is the code:

WebRequest request = WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
string[] firstData = { "89", "354", "AF001" };
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream());
requestWriter.Write(firstData);
requestWriter.Close();

string[] secondData = { "8911", "354", "01" };;
StreamWriter requestWriter2 = new StreamWriter(request.GetRequestStream());
requestWriter2.Write(secondData);
requestWriter2.Close();

Upvotes: 2

Views: 9661

Answers (2)

EnderCode
EnderCode

Reputation: 235

I changed string[] to var and it worked:

 WebRequest request = WebRequest.Create(apiUrl);
 request.Method = "POST";
 request.ContentType = "application/json;charset=UTF-8";

 data = "[ \"89\", \"354\", \"AF001\" ]";

 StreamWriter requestWriter = new StreamWriter(request.GetRequestStream());

 requestWriter.Write(data);

 requestWriter.Close();



  WebResponse response = request.GetResponse();
  Console.WriteLine(((HttpWebResponse)response).StatusDescription);

  response.Close();

  request = WebRequest.Create(url);
  request.Method = "POST";
  request.ContentType = "application/json;charset=UTF-8";


   StreamWriter requestWriter2 = new StreamWriter(request.GetRequestStream())

   var data2 = ""[ \"55\", \"3524\", \"b01\" ]";

   requestWriter2.Write(data2);
   requestWriter2.Close();

   WebResponse response2 = request.GetResponse()
   Console.WriteLine(((HttpWebResponse)response2).StatusDescription);

created new WebResponse and StreamWriter for the second request

Upvotes: 1

Yuval Itzchakov
Yuval Itzchakov

Reputation: 149538

You can't re-use the same WebRequest stream twice, which you're doing when calling request.GetRequestStream on both StreamWriter instantiations. That's why it's throwing the exception. I'm not sure why you're getting the request stream twice, each time to a different StreamWriter. You can simply combine them to one:

WebRequest request = WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";

using (StreamWriter requestWriter = new StreamWriter(request.GetRequestStream()))
{
    string[] firstData = { "89", "354", "AF001" };
    requestWriter.Write(firstData);

    string[] secondData = { "8911", "354", "01" }; ;
    requestWriter.Write(secondData);
}

As a side note, you can greatly reduce the verbosiness of your code using WebClient:

using (var webClient = new WebClient())
{
    webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
    webClient.UploadData(Url, Encoding.UTF8.GetBytes(firstData));
    webClient.UploadData(Url, Encoding.UTF8.GetBytes(secondData));
}

Upvotes: 1

Related Questions