Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use HttpWebRequest with GET method

I have the following code which works just fine when the method is "POST", but changing to "GET" doesn't work:

HttpWebRequest request = null; request = HttpWebRequest.Create(uri) as HttpWebRequest; request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; request.Method = "POST"; // Doesn't work with "GET"  request.BeginGetRequestStream(this.RequestCallback, null); 

I get a ProtocolViolationException exception with the "GET" method.

Edit: After having a look using Reflector, it seems there is an explicit check for the "GET" method, if it's set to that it throws the exception.

Edit2: I've updated my code to the following, but it still throws an exception when I call EndGetResponse()

if (request.Method == "GET") {     request.BeginGetResponse(this.ResponseCallback, state); } else {     request.BeginGetRequestStream(this.RequestCallback, state); } 

In my function, ResponseCallback, I have this:

HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); 

Which throws the exception as well.

Answer

The above code now works, I had forgotten to take out the Content-Type line which was causing the exception to be thrown at the end. +1 to tweakt & answer to Jon.

The working code is now below:

HttpWebRequest request = null; request = HttpWebRequest.Create(uri) as HttpWebRequest; request.Method = "GET";// Supports POST too  if (request.Method == "GET") {     request.BeginGetResponse(this.ResponseCallback, state); } else {     request.BeginGetRequestStream(this.RequestCallback, state); } 
like image 446
Mark Ingram Avatar asked Oct 31 '08 13:10

Mark Ingram


People also ask

How do I get HTTP in C#?

C# GET request with HttpClient HttpClient provides a base class for sending HTTP requests and receiving HTTP responses from a resource identified by a URI. using var client = new HttpClient(); var content = await client. GetStringAsync("http://webcode.me"); Console. WriteLine(content);


1 Answers

This is specified in the documentation. Basically GET requests aren't meant to contain bodies, so there's no sensible reason to call BeginGetRequestStream.

like image 94
Jon Skeet Avatar answered Sep 23 '22 04:09

Jon Skeet