Windows Phone POST-метод класса WebClient - PullRequest
1 голос
/ 24 февраля 2012

Я новичок в этом форуме, а также Windows Phone Development. В настоящее время я занимаюсь разработкой приложения, в котором я работаю с веб-сервисом, и мне нужно сделать POST-запрос к веб-сервису. Я пытаюсь выполнить функцию входа пользователя в систему, для которой, -> http://abc.com/login (URI) -> (ПАРАМЕТРЫ) apikey: 32 байта длиной буквенно-цифровой имя пользователя: 3-15 символов пароль: 3-15 символов

Так что для этого я пытаюсь использовать метод UploadStringSync класса WebClient для отправки данных. Мой код выглядит следующим образом.

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); 
}

Здесь останавливается выполнение в строке MessageBox и выдает сообщение «Удаленный сервер возвратил ошибку: NotFound.»

Есть ли проблемы с тем, как я передаю параметры? Я пытался найти работающую реализацию везде, но не смог ее найти.

Кто-нибудь может мне помочь с этим? Это отправная точка моего проекта, и мне действительно нужна помощь в этом. Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 30 октября 2014

Я сделал это, и это сработало

 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;

и после завершения загрузки, чтобы получить HTML, я использовал htmlagilitypack, вы можете просто получить весь HTML, используя e.Result

 HtmlDocument doc = new HtmlDocument();
 doc.LoadHtml(e.Result);
 HtmlNode node = doc.DocumentNode.SelectSingleNode("//body//table");
 MessageBox.Show(node.InnerText);
1 голос
/ 27 февраля 2012

попробуйте это:

    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);
    }
...