2015-04-22 210 views
0

我正在使用this將我的客戶端應用程序掛接到我的Web服務中。
另外,我是looking at MSDN關於讀取第一個鏈接的GetResponse。從Web服務讀取響應數據

下面是我到目前爲止已經獲得了代碼:

public ActionResult Index() 
    { 
     WebRequest request = WebRequest.Create("http://localhost:49474/api/Store/Get"); 
     request.Method = "GET"; 
     WebResponse response = request.GetResponse(); 

     Stream stores = response.GetResponseStream(); 
     Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 

     StreamReader sr = new StreamReader(stores, encode); 
     Char[] read = new Char[1024]; 

     int count = sr.Read(read, 0, 1024); 
     List<Store> storesList = new List<Store>(); 

     while (count > 0) 
     { 
      // need to read the contents of the response strem into the above instantiated list of stores. 
     } 
    } 

我的API提供的數據是這樣的:

public HttpResponseMessage Get() 
    { 
     List<Store> stores = db.Stores.ToList(); 

     HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, stores); 

     return response; 
    } 

坦率地說,我不知道接下來要去哪裏。 MSDN鏈接將其全部寫入字符串,但我的擔憂是:

  • 我怎麼知道每次需要爲每條記錄讀取多少個字符?
  • 如何讀取API發送的數據以便我可以在我的視圖中使用它?
+0

你打算使用第三方庫嗎?如果是這樣,你可能想嘗試類似[RestSharp](http://restsharp.org/) –

+0

我假設我在客戶端應用程序中使用它,現在正在編寫使用Web服務中的數據? – Ortund

+0

是的,你在客戶端使用它。它會自動讀取和反序列化您的響應數據,只要它被序列化爲JSON或XML。 –

回答

1

您可以使用sr.ReadToEnd()來獲取整個響應字符串。至少你可以設置一個斷點並在調試器中查看,以確保你獲得了期望的結果。然後寫一個函數來解析你的結果到某種類中,或者使用第三方庫來解析它們,如果它們是標準格式的;即如果結果是JSON,則使用Json.NET。

注意,如果阻塞是一個問題(通常它不適用於簡單的客戶端應用程序,但仍然是學習的好方法),您還可以使用內置的異步操作。

+0

所以這裏是服務發送的內容...你能確認這個結果類型是'application/json'嗎? http://i.imgur.com/0GX3VMK.png – Ortund

+0

@Ortund我不確定這究竟是什麼結果。看起來像已經被(完全猜測)WCF解析出來的東西,或者其他我以前沒有用過的東西。我想你應該可以做'var stores =(列表)response.Content.Value'或類似的東西,以得到你想要的結果。 –

+0

它來自ASP.NET Web API。它還沒有序列化對象,但它看起來像將它序列化爲JSON,因爲'Content-Type'是'application/json',它使用'JsonMediaTypeFormatter'。 –