在Windows Phone系統中,通過HttpWebRequest類可以很容易的發送網絡請求,獲取網絡數據。HttpWebRequest是異步操作,不會堵塞主線程。
1.通過HttpWebRequest.CreateHttp()方法可以創建一個HttpWebRequest,下面代碼簡單實現發送一個GET請求。

public void httpGet() { try { //請求地址 String url = "http://www.cnblogs.com/huizhang212/"; //創建WebRequest類 HttpWebRequest request = HttpWebRequest.CreateHttp(new Uri(url)); //設置請求方式GET POST request.Method = "GET"; //返回應答請求異步操作的狀態 request.BeginGetResponse(responseCallback, request); } catch (WebException e) { //網絡相關異常處理 } catch (Exception e) { //異常處理 } }
2.應答數據接收部分。

private void responseCallback(IAsyncResult result) { try { //獲取異步操作返回的的信息 HttpWebRequest request = (HttpWebRequest)result.AsyncState; //結束對 Internet 資源的異步請求 HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result); //解析應答頭 //parseRecvHeader(response.Headers); //獲取請求體信息長度 long contentLength = response.ContentLength; //獲取應答碼 int statusCode = (int)response.StatusCode; string statusText = response.StatusDescription; //應答頭信息驗證 using (Stream stream = response.GetResponseStream()) { //獲取請求信息 StreamReader read = new StreamReader(stream); string msg = read.ReadToEnd(); Deployment.Current.Dispatcher.BeginInvoke(() => { textBlock1.Text = msg; }); } } catch (WebException e) { //連接失敗 } catch (Exception e) { //異常處理 } }
通過HttpWebResponse可以獲取返回的數據,在獲取數據后,要想將數據顯示到界面中,這里要主要一個問題。由於HttpWebRequest是異步操作,所以這里應該有一個線程來處理網絡,大家都知道Windows Phone中在線程里是不能操作UI的,這個需要交個UI主線程來處理,所以代碼中用到了Deployment.Current.Dispatcher.BeginInvoke。
3.上面是簡單的GET請求,POST請求和GET請求相比,多了一個發送請求體的操作過程。以下代碼為POST請求,應對部分操作函數仍然是responseCallback。

public void httpPost() { try { //請求地址 String url = "http://www.cnblogs.com/huizhang212/"; //創建WebRequest類 HttpWebRequest request = HttpWebRequest.CreateHttp(new Uri(url)); //設置請求方式GET POST request.Method = "POST"; //返回應答請求異步操作的狀態 request.BeginGetRequestStream(requestCallback, request); } catch (WebException e) { //網絡相關異常處理 } catch (Exception e) { //異常處理 } } private void requestCallback(IAsyncResult result) { try { //獲取異步操作返回的的信息 HttpWebRequest request = (HttpWebRequest)result.AsyncState; //結束對 Internet 資源的異步請求 StreamWriter postStream = new StreamWriter(request.EndGetRequestStream(result)); postStream.WriteLine("作者:宇之樂"); postStream.WriteLine("出處:http://www.cnblogs.com/huizhang212/"); //返回應答請求異步操作的狀態 request.BeginGetResponse(responseCallback, request); } catch (WebException e) { //異常處理 } catch (Exception e) { //異常處理 } }