Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'System.Net.HttpWebRequest' does not contain a definition for 'GetRequestStream'

I am new to both C# and Windows phone and am trying to make a small app that performs a JSON request. I am following the example in this post https://stackoverflow.com/a/4988809/702638

My current code is this:

public string login()
{
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(MY_URL);
    httpWebRequest.ContentType = "text/plain"; 
    httpWebRequest.Method      = "POST";

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
       string text = MY_JSON_STRING;
       streamWriter.Write(text);
    }
}

but for some reason Visual Studio is flagging GetRequestStream() with an error message:

error CS1061: 'System.Net.HttpWebRequest' does not contain a definition for 'GetRequestStream' and no extension method 'GetRequestStream' accepting a first argument of type 'System.Net.HttpWebRequest' could be found (are you missing a using directive or an assembly reference?)

Any thoughts on why this would be happening? I have already imported the System.Net package.

like image 358
Hunter McMillen Avatar asked Jan 15 '13 18:01

Hunter McMillen


People also ask

What is GetRequestStream in c#?

GetRequestStream() Gets a Stream object to use to write request data. GetRequestStream(TransportContext) Gets a Stream object to use to write request data and outputs the TransportContext associated with the stream.

What is HttpWebRequest?

The HttpWebRequest class provides support for the properties and methods defined in WebRequest and for additional properties and methods that enable the user to interact directly with servers using HTTP.


1 Answers

HttpWebRequest doesn't have a GetRequestStream or GetRequestStreamAsync in WP8. Your best bet is to create a Task and await on it, like so:

using (var stream = await Task.Factory.FromAsync<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream, null))
{
    // ...
}

Edit: as you've mentioned that you're new to C#, you would need to have your login method be async to use the await keyword:

public async Task<string> LoginAsync()
{
    // ...
}

Callers to login would need to use the await keyword when calling:

string result = await foo.LoginAsync();

Here's a good primer on the subject: http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx

like image 130
Peter Huene Avatar answered Nov 14 '22 11:11

Peter Huene