簡體   English   中英

asp.net WebRequest流在調試器中引發“此流不支持查找操作”錯誤

[英]asp.net WebRequest stream throwing 'This stream does not support seek operations' error in debugger

我是asp.net中WebRequest調用的新手。 我正在嘗試將WebRequest與Expedia(EAN)API( https://developer.ean.com/code-library/ )一起使用。 他們有一個不起作用的示例(據我所知),即使使用自己的API也無法幫助編碼人員。

這是我的問題:

當我在調試器中發出request.GetRequestStream()調用時,我得到一個“'(((System.Net.ConnectStream)dataStream).Length'引發了類型為'System.NotSupportedException'的異常),其值為“此流不會不支持搜索操作”。

當然,GetResponse()調用會超時。

我也不清楚網絡字符串的哪一部分發送到.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可能很多,但是有人看到我在做什么錯嗎???

謝謝-戴夫

如果查看他們的文檔,您將看到:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM