143

I'm creating a web request in ASP.NET and I need to add a bunch of data to the body. How do I do that?

var request = HttpWebRequest.Create(targetURL); request.Method = "PUT"; response = (HttpWebResponse)request.GetResponse(); 
0

3 Answers 3

123

With HttpWebRequest.GetRequestStream

Code example from http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx

string postData = "firstone=" + inputData; ASCIIEncoding encoding = new ASCIIEncoding (); byte[] byte1 = encoding.GetBytes (postData); // Set the content type of the data being posted. myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; // Set the content length of the string being posted. myHttpWebRequest.ContentLength = byte1.Length; Stream newStream = myHttpWebRequest.GetRequestStream (); newStream.Write (byte1, 0, byte1.Length); 

From one of my own code:

var request = (HttpWebRequest)WebRequest.Create(uri); request.Credentials = this.credentials; request.Method = method; request.ContentType = "application/atom+xml;type=entry"; using (Stream requestStream = request.GetRequestStream()) using (var xmlWriter = XmlWriter.Create(requestStream, new XmlWriterSettings() { Indent = true, NewLineHandling = NewLineHandling.Entitize, })) { cmisAtomEntry.WriteXml(xmlWriter); } try { return (HttpWebResponse)request.GetResponse(); } catch (WebException wex) { var httpResponse = wex.Response as HttpWebResponse; if (httpResponse != null) { throw new ApplicationException(string.Format( "Remote server call {0} {1} resulted in a http error {2} {3}.", method, uri, httpResponse.StatusCode, httpResponse.StatusDescription), wex); } else { throw new ApplicationException(string.Format( "Remote server call {0} {1} resulted in an error.", method, uri), wex); } } catch (Exception) { throw; } 
Sign up to request clarification or add additional context in comments.

4 Comments

Hi Torbjorn, I'm using the request so I can get the 'request.GetResponse();', in the above example how would that work?
When you call GetRequestStream() it makes the call to the server. So, you would have to add that to the end of the above example.
Is there a way to see the full text inside a request object for debugging purposes? I tried serializing it and tried using a StreamReader, but no matter what I do I can not see the data I just wrote to the request.
@James, You should be able to use fiddler or wireshark to see the full request with it's body.
52

Update

See my other SO answer.


Original

var request = (HttpWebRequest)WebRequest.Create("https://example.com/endpoint"); string stringData = ""; // place body here var data = Encoding.Default.GetBytes(stringData); // note: choose appropriate encoding request.Method = "PUT"; request.ContentType = ""; // place MIME type here request.ContentLength = data.Length; var newStream = request.GetRequestStream(); // get a ref to the request body so it can be modified newStream.Write(data, 0, data.Length); newStream.Close(); 

2 Comments

Are you missing something? Like an httpWReq.Content = newStream; you are not using your newStream object with your webRequest.
To answer @Yogurtu's question for completeness, the Stream object that newStream points to writes directly to the body of the request. It is accessed by the call to HttpWReq.GetRequestStream(). There is no need to set anything else on the request.
10

Most likely you have been given an API and want that in your C# project. Using Postman, you can setup and test the API call there and once it runs properly, you can simply click 'Code' and the request that you have been working on is converted to a C# snippet. Like this:

var client = new RestClient("https://api.XXXXX.nl/oauth/token"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Basic N2I1YTM4************************************jI0YzJhNDg="); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("grant_type", "password"); request.AddParameter("username", "[email protected]"); request.AddParameter("password", "XXXXXXXXXXXXX"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); 

The code above depends on the NuGet package RestSharp, which you can easily install.

1 Comment

One addition: The 'Code' button is found on the right upper side of the window in Postman where you setup and test the api call

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.