Reputation: 235
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
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
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