user1016310
user1016310

Reputation: 23

Windows Phone POST method WebClient class

I am new to this forum as well as Windows Phone Development. I am currently developing an app in which I am working with a Web-Service and I need to make a POST request to a web service. I am trying to accomplish a user login functionality here for which, -> http://abc.com/login (URI) -> (PARAMETERS) apikey: 32 byte long alpha-numeric username: 3-15 characters password: 3-15 characters

So for this I am trying to use WebClient class' UploadStringSync method in order to POST the data. My code is as follows.

WebClient wc1 = new WebClient();
wc1.UploadStringAsync(new Uri("http://abc.com/login"),"POST","?apikey=" + Apikey + "&username=username&password=password");
wc1.UploadStringCompleted += new UploadStringCompletedEventHandler(wc1_UploadStringCompleted);

void wc1_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
          MessageBox.Show(e.Result); 
}

Execution stops here at MessageBox line and throws message saying 'The remote server returned an error: NotFound.'

Is there any problem with the way I am passing the parameters? I tried to search for the working implementation everywhere but was unable to find it.

Can anybody help me with this? This is a starting point of my project and really need help on this one. Any help would be much appreciated.

Upvotes: 1

Views: 6034

Answers (2)

Bibaswann Bandyopadhyay
Bibaswann Bandyopadhyay

Reputation: 3547

I did this and it worked

 WebClient web = new WebClient();
 web.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
 web.UploadStringAsync((new Uri("http://www.something.com/?page=something")), "POST", string.Format("v1=onevalue&v2=anothervalue"));
 web.UploadStringCompleted += web_UploadStringCompleted;

and after upload is complete to get the html i used htmlagilitypack, you can just get the whole html using e.Result

 HtmlDocument doc = new HtmlDocument();
 doc.LoadHtml(e.Result);
 HtmlNode node = doc.DocumentNode.SelectSingleNode("//body//table");
 MessageBox.Show(node.InnerText);

Upvotes: 1

argh
argh

Reputation: 933

try this:

    public void Post(string address, string parameters, Action<string> onResponseGot)
    {
        Uri uri = new Uri(address);
        HttpWebRequest r = (HttpWebRequest)WebRequest.Create(uri);
        r.Method = "POST";


        r.BeginGetRequestStream(delegate(IAsyncResult req)
            {
                var outStream = r.EndGetRequestStream(req);

                using (StreamWriter w = new StreamWriter(outStream))
                    w.Write(parameters);

                r.BeginGetResponse(delegate(IAsyncResult result)
                    {
                        try
                        {
                            HttpWebResponse response = (HttpWebResponse)r.EndGetResponse(result);

                            using (var stream = response.GetResponseStream())
                            {
                                using (StreamReader reader = new StreamReader(stream))
                                {
                                    onResponseGot(reader.ReadToEnd());
                                }
                            }
                        }
                        catch
                        {
                            onResponseGot(null);
                        }

                    }, null);

            }, null);
    }

Upvotes: 1

Related Questions