C# HTTP POST with Boundary

c#, http-post, httpwebrequest

Solution

I blogged about this and presented a sample method that could be used to send `multipart/form-data` requests. Checkout here: http://www.bratched.com/en/home/dotnet/69-uploading-multiple-files-with-c.html

Problem

I need a little help setting up a HTTP Post in C#. I appreciate any assistance I receive in advance. Using Fiddler here is my RAW POST: ``` POST http://www.domain.com/tester.aspx HTTP/1.1 User-Agent: Tegan Content-Type: multipart/form-data; boundary=myboundary Host: www.domain.com Content-Length: 1538 Expect: 100-continue <some-xml> <customer> <user-id>george</user-id> <first-name>George</first-name> <last-name>Jones</last-name> </customer> </some-xml> ``` My requirements are a little tricky. They require a multi-part post with a boundary. I'm not familiar with setting up a boundary. If any one can assist I would appreciate it. Here are my requirements: ``` POST http://www.domain.com/tester.aspx HTTP/1.0(CRLF) User-Agent: myprogramname(CRLF) Content-Type: multipart/form-data; boundary=myboundary(CRLF) Content-Length: nnn(CRLF) (CRLF) (CRLF) --myboundary(CRLF) Content-Disposition: form-data; name=”xmlrequest”(CRLF) Content-Type: text/xml(CRLF) (CRLF) (XML request message)(CRLF) (CRLF) --myboundary--(CRLF) ``` So I think this is what the POST should look like but I need some help with my C#. ``` POST http://www.domain.com/tester.aspx HTTP/1.1 User-Agent: Tegan Content-Type: multipart/form-data; boundary=myboundary Content-Length: 1538 --myboundary Content-Disposition: form-data; name="xmlrequest" Content-Type: text/xml <some-xml> <customer> <user-id>george</user-id> <first-name>George</first-name> <last-name>Jones</last-name> </customer> </some-xml> (CRLF) --myboundary-- ``` Here is the C# code I'm using to create the WebRequest. ``` HttpWebRequest request = null; Uri uri = new Uri("http://domain.com/tester.aspx"); request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "POST"; request.UserAgent = "NPPD"; request.ContentType = "multipart/form-data; boundary=myboundary"; request.ContentLength = postData.Length; using (Stream writeStream = request.GetRequestStream()) { writeStream.Write(postData, 0, postData.Length); } string result = string.Empty; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8)) { result = readStream.ReadToEnd(); } } } return result; ```

Original source