2012-02-24 2 views
1

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

Итак, для этого я пытаюсь использовать метод WebStartSQL для WebClient для POST-данных. Мой код выглядит следующим образом.

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.

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

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

+0

Возможно, что-то с вашим 'Url'. Можете ли вы попробовать добавить 'www' и абсолютный' UriKind': 'новый Uri (« http://WWW.abc.com/login », UriKind.Absolute)' – Ku6opr

ответ

1

попробовать это:

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

Спасибо за вашу помощь. Он работает – user1016310

+1

Что нужно для параметра Action onResponseGot? – Oblieapps

1

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

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, используя е. Результат

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(e.Result); 
HtmlNode node = doc.DocumentNode.SelectSingleNode("//body//table"); 
MessageBox.Show(node.InnerText); 
Смежные вопросы