2014-09-11 38 views
0

我是新來的Xamarin和C#以及。我嘗試使用一些信息向我的服務器發出Http請求。 一般來說,android Native a使用AsyncTask和HttpClient。並構建一個json對象或名稱值對,並對其進行加密以將信息與請求集成在一起。 但是,當我嘗試用xamarin做同樣的事情時,我遇到了一些問題。如何使用HttpWebRequest與異步和等待

  1. ,如果我嘗試導入使用System.Net.Http.HttpClient 比我xamarin沒有這個命名空間

    命名空間

  • 由於上述問題,我嘗試使用HttpWebRequest。但是當我用它與asyc一起使用並等待時,我沒有收到服務器的任何響應。
  • 我是新來的xamarin,所以我不確定關於異步和等待關鍵字。 我看了很多文章,但沒有運氣:(

    上單擊按鈕的我叫下面的方法

    public async Task<int> ValidateUser(){ 
        try{ 
        var request = HttpWebRequest.Create (URL); 
        request.Method = "GET/POST"; 
        String postString = String.Format ("AAA ={0}&BBB={1}&CCC={2}", "111", 
                  "222","333"); 
    
         byte[] postByte = Encoding.UTF8.GetBytes (postString); 
    
         Stream st = request.GetRequestStream(); 
    
         //I am reaching here 
          Console.WriteLine("Check for Validity"); 
    
         request.ContentLength = postByte.Length; 
    
         st.Write (postByte, 0, postByte.Length); 
    
         st.Close(); 
          Task<Stream> contentTask = request.GetRequestStreamAsync(); 
          Stream response = await contentTask; 
    
          String str = response.ToString(); 
    
          // this is not getting printed in Console 
           Console.WriteLine("=====>>"+str); 
    
         } 
         catch (WebException exception) { 
          string responseText; 
          using (var reader = new StreamReader(exception.Response.GetResponseStream())) { 
           responseText = reader.ReadToEnd(); 
           Console.WriteLine ("====Dude Error"+responseText); 
          } 
         }catch(Exception e){ 
    
         } 
         return 1; 
        } 
    

    任何幫助將不勝感激

    +2

    使用HttpWebRequest的是一個壞主意,而是最好關注爲什麼你沒有System.Net.Http。*命名空間。 最可能的原因是,您沒有添加System.Net.Http作爲您項目的參考。 – Frank 2014-09-11 12:23:01

    +0

    我試圖添加,但它不是博士... PLZ告訴我,如果它不存在,如何集成在Xamarin – 2014-09-11 14:01:42

    回答

    0

    使用HttpWebRequest的是一個壞主意,而是最好將注意力放在爲什麼你沒有System.Net.Http。*命名空間,Imho最可能的原因是你沒有添加System.Net.Http作爲你的項目的參考。

    以下是將System.Net.Http。*添加到您的項目中的方法噸。

    在Visual Studio 2013:

    • 打開解決方案
    • 打開項目
    • 打開解決方案資源管理器
    • 上的引用右鍵單擊
    • 添加引用
    • 點擊「搜索組件'
    • 輸入'Http'
    • 選擇System.Net.Http
    • 按下 'OK'

    在Xamarin演播室:

    • 打開解決方案
    • 打開項目
    • 打開Solution Explorer中
    • 右鍵點擊參考文獻
    • 編輯參考文獻ces
    • 輸入'Http'
    • 選擇System.Net。HTTP
    • 按下 'OK'

    之後應該有解決的時候沒有System.Net.Http問題 '使用System.Net.Http;'

    +0

    我嘗試上面使用System.Net.Http;現在它顯示我HttpClient謝謝你弗蘭克 – 2014-09-12 04:41:23

    +0

    你可以然後請接受答案? – Frank 2014-09-12 06:22:41

    2

    考慮使用RestSharp,一個爲Xamarin創建的組件,以方便Web請求。 Click here瞭解組件的更多信息。這將促進東西配發約webrequesting(如系列化,自動復原型檢測,...)

    您的代碼將看起來像這樣與restsharp:

    public async Task<int> ValidateUser(){ 
    
        var client = RestClient (URL); 
        var request = new RestRequest ("AAA ={0}&BBB={1}&CCC={2}", "111", 
                  "222","333"); 
    
          client.ExecuteAsync (request, response => { 
    
            WebApiResponse webApiResponse = new WebApiResponse(); 
    
            webApiResponse.Content = response.Content; 
            webApiResponse.StatusCode = response.StatusCode; 
            webApiResponse.ResponseStatus = (WebApiResponseStatus)response.ResponseStatus; 
    
            return webApiResponse.Content; 
           });   
    
    
         return -1 
    
        } 
    
    +0

    感謝您的指導,但我認爲這將是client = new RestClient(URL);在request = new RestClient(URL)的地方; – 2014-09-12 11:04:44

    +0

    我的appologies,我糾正了我的錯誤。如果你使用這個答案,你可以通過點擊帶有兩個箭頭的數字旁邊的V來將它標記爲正確的答案嗎? Thx :) – Chris 2014-09-12 11:30:07

    +0

    對不起,我現在沒有足夠的聲譽 – 2014-09-12 11:35:10