2015-04-22 205 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'。 –