2015-04-22 56 views
0

Im新的WebRequest調用在asp.net中。我正嘗試使用WebRequest和Expedia(EAN)API(https://developer.ean.com/code-library/)。他們有一個不起作用的例子(據我所知),即使使用自己的API,也不能幫助編碼人員。asp.net WebRequest流拋出'這個流不支持查找操作'在調試器中的錯誤

這裏是我的問題:

當我做在調試器中request.GetRequestStream()調用我拿回 「‘((System.Net.ConnectStream)數據流)。長度’拋出的異常鍵入'System.NotSupportedException',並且值「此流不支持查找操作」。

當然,GetResponse()調用超時。

我也不清楚Web字符串的哪一部分被髮送到.Create方法(下面的xmlpath)以及哪部分被髮送到請求(postData下面)?

下面是代碼:

string xmlpath = "http://api.ean.com/ean-services/rs/hotel/v3/avail?"; 
string postData = "minorRev=99&cid=55505&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_US&currencyCode=USD&_type=json&hotelId=125719&arrivalDate=11/11/2015&departureDate=11/13/2015&includeDetails=true&includeRoomImages=true&room1=2,5,7"; 

WebRequest request = WebRequest.Create(xmlpath); 
byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

request.Method = "POST"; 
request.ContentType = "application/json"; 
request.ContentLength = byteArray.Length; 
request.Timeout = 10000; 

Stream dataStream = request.GetRequestStream(); 

dataStream.Write(byteArray, 0, byteArray.Length); 
dataStream.Close(); 

WebResponse myResponse = request.GetResponse(); 

StreamReader reader = new StreamReader(myResponse.GetResponseStream()); 
string responseFromServer = reader.ReadToEnd(); 

我知道這可能是很多考慮它的第三方API,但沒有人看到我可能是做錯了???

感謝, -Dave

回答

0

如果你檢查自己的文件,你會看到:在EAN API中

服務都是通過標準的基礎URL訪問 格式對所有協議

這意味着您需要執行GET請求並在URL中粘貼搜索參數。因此,您的代碼可能如下所示:

var url = 
    "http://api.ean.com/ean-services/rs/hotel/v3/avail" + 
    "?minorRev=99&cid=55505&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_US" + 
    "&currencyCode=USD&_type=json&hotelId=125719&arrivalDate=11/11/2015" + 
    "&departureDate=11/13/2015&includeDetails=true" + 
    "&includeRoomImages=true&room1=2,5,7"; 
var req = (HttpWebRequest)WebRequest.Create(url); 
req.Method = "GET"; 

using (var res = req.GetResponse()) 
{ 
    using (var resStream = res.GetResponseStream()) 
    { 
     using (var reader = new StreamReader(resStream)) 
     { 
      var json = reader.ReadToEnd(); 
     } 
    } 
} 

而且您確實不需要混淆所有這些請求,響應和流。如果您使用.Net 4.5,請查看HttClient。有了這個類代碼將很短:

using (var httpClient = new HttpClient()) 
{ 
    var json = httpClient.GetStringAsync(url).Result; 
} 
+0

謝謝你Aleksandr ...欣賞答案,因爲他們都爲我完美工作。特別欣賞4.5中的多麼容易。 再次感謝! –