Does this code make sense HttpWebRequest / HttpWebResponse / StreamReader?

Instead of adding to my question here , I am adding a new one, since as soon as I looked at my code with the X-Ray viewpoints attached to it, I do not understand.

I don’t even remember where I got this code, but this is an adaptation of an example that I found somewhere. However, it seems that the data is not even sent to the server. To be specific, this code:

public static string SendXMLFile(string xmlFilepath, string uri) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "POST"; StringBuilder sb = new StringBuilder(); using (StreamReader sr = new StreamReader(xmlFilepath)) { String line; while ((line = sr.ReadLine()) != null) { // test to see if it finding any lines //MessageBox.Show(line); <= works fine sb.AppendLine(line); } byte[] postBytes = Encoding.UTF8.GetBytes(sb.ToString()); request.ContentLength = postBytes.Length; // Did the sb get into the byte array? //MessageBox.Show(request.ContentLength.ToString()); <= shows "112" (seems right) request.KeepAlive = false; request.ContentType = "application/xml"; try { Stream requestStream = request.GetRequestStream(); // now test this: MessageBox.Show() below causing exception? See /questions/811237/why-is-the-httpwebrequest-body-val-null-after-crossing-the-rubicon //MessageBox.Show(string.Format("requestStream length is {0}", requestStream.Length.ToString())); requestStream.Write(postBytes, 0, postBytes.Length); MessageBox.Show(string.Format("requestStream length is {0}", requestStream.Length.ToString())); requestStream.Close(); using (var response = (HttpWebResponse)request.GetResponse()) { return response.ToString(); } } catch (Exception ex) { MessageBox.Show("SendXMLFile exception " + ex.Message); request.Abort(); return string.Empty; } } } 

... seems to do this:

 0) Reads the contents of the file at xmlFilepath and puts it into a StreamReader ("sr") 1) A StringBuilder ("sb") is populated with the contents of the StreamReader 2) The contents of the StringBuilder are put into an array of Bytes ("postBytes") - then here comes the weird part (or so it seems to me, after analyzing the code more closely): 3) The contents of the array of bytes are written to a Stream ("requestStream") 4) The Stream is closed (???) 5) The HttpWebRequest ("request") attempts to return a HttpWebResponse by calling GetResponse() 
  • but what does the request contain? Content (StreamReader => StringBuilder => Array of Bytes => Stream) is never assigned to it! It seems that Stream exists for the sole purpose - to write lines of code, heat up the processor and slow down!

Is this code pointless, or am I just not rattling it?

0
source share
1 answer

GetRequestStream() returns a stream that forwards through HttpWebRequest to the network.
Your code is too long, but correct.

However, response.ToString() is incorrect; you want to read response.GetResponseStream() using StreamReader .

+1
source

All Articles