2012-02-24 19 views
1

我是新來這個論壇,以及Windows Phone開發。我目前正在開發一個應用程序,其中我正在使用Web服務,並且需要向Web服務發出POST請求。 我想在這裏完成一個用戶登錄功能爲此, - >http://abc.com/login(URI) - >(參數) apikey:32字節長的字母數字 用戶名:3-15字符 密碼:3-15字符的Windows Phone POST方法WebClient類

所以爲了這個,我想使用WebClient類UploadStringSync方法,以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 2012-02-24 18:56:39

回答

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 2012-02-29 17:31:48

+1

是什麼 onResponseGot參數需要的行動呢? – Oblieapps 2012-12-06 23:29:24

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; 

,並上傳完成後能得到我所用htmlagilitypack的HTML,你可以使用e先手整個HTML。結果

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