Search code examples
c#windows-phone-8

'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.


Solution

  • 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