2012-02-24 56 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);