2015-05-21 103 views
1

我想作以下捲曲呼叫我的C#應用​​程序:我初學者的代碼 **在facebook城市的這段代碼獲取JSON響應包含字符「a從Facebook圖形API'和字符‘b’我試圖讓我有錯誤的請求被中止:連接被意外關閉**我想作以下捲曲呼叫我的C#應用​​程序

private JArray Getcities(string token) 
{ 
    try 
    { 

    string s1 = "access_token="+Server.UrlEncode(token); 
    string s2 = "&batch=" + Server.UrlEncode(" [ { \"method\": \"get\", \"relative_url\":\"search?type=adgeolocation&location_types=city&region_id=3871&country_code=us&limit=3000&q=a\" }, { \"method\": \"get\", \"relative_url\": \"search?type=adgeolocation&location_types=city&region_id=3871&country_code=us&limit=3000&q=b\" } ]"); 


     HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("https://graph.facebook.com/v2.3/");//make url 
     httpRequest.Method = "Post"; 
     httpRequest.ContentType = "text/json; charset=utf-8"; 
     byte[] bytedata = Encoding.UTF8.GetBytes(s1 + s2); 
     httpRequest.ContentLength = bytedata.Length; 
     Stream requestStream = httpRequest.GetRequestStream(); 
     requestStream.Write(bytedata,0,bytedata.Length); 
     requestStream.Close(); 
     StreamReader reader; 
     HttpWebResponse httpWebResponse = (HttpWebResponse) httpRequest.GetResponse() 

      using (var responsestream = httpWebResponse.GetResponseStream()) 
      { 
       reader = new StreamReader(responsestream, encoding: Encoding.UTF8); 
      } 


     var apiData = reader.ReadToEnd(); 
     Response.Write(apiData); 
     var data = JArray.Parse(apiData).ToString(); 
     //var s = data["data"].ToString(); 
     var x = JArray.Parse(data); 
     return x; 
    } 

回答

1

的問題是在你使用的語句

using (var responsestream = httpWebResponse.GetResponseStream()) 
{ 
    reader = new StreamReader(responsestream, encoding: Encoding.UTF8); 
} 

在流使用的語句結束,因此當您嘗試讀取結束時它不再有效。如果你這樣重寫,它應該可以工作。

byte[] apiData; 
using (var responsestream = httpWebResponse.GetResponseStream()) 
{ 
    reader = new StreamReader(responsestream, encoding: Encoding.UTF8); 
    apiData = reader.ReadToEnd(); 
} 

然後在讀取所有數據之後處理流。

+0

**真的感謝丹尼爾·斯萊特它的工作** – Eslam

+0

我可以在同批20個請求用相同的方式 – Eslam

+0

感謝丹尼爾·斯萊特將其與20個請求 – Eslam