2013-01-09 98 views
1

我們正在將我們的解決方案之一移植到PCL中,但面臨着許多關於.NET框架基類庫支持的類和屬性的問題。爲了在不同的平臺上運行相同的功能,我們實現了WebClient,但是我們在WebRespornce類中看不到狀態代碼屬性。便攜式類庫WebResponse StatusCode缺少

在我發佈代碼示例之前,讓我強調一下我們目前針對的平臺。

框架版本是4.5 我們的目標平臺是; Windows 8(RT) Windows 7/8與WPF應用程序。

這裏是我們使用雲計算,但沒有找到StatusCode屬性裏面WebResponce

private static byte[] ReadStreamFromResponce(WebResponse result) 
    { 
     using (var responseStream = result.GetResponseStream()) 
     using (var ms = new MemoryStream()) 
     { 
      if (responseStream != null) responseStream.CopyTo(ms); 
      return ms.ToArray(); 
     } 
    } 

    private static Task<byte[]> MakeAsyncRequest(string requestString) 
    { 
     var request = (HttpWebRequest)WebRequest.Create(requestString); 
     Task<WebResponse> requestTask = Task.Factory.FromAsync(
      request.BeginGetResponse, 
      asyncResult => request.EndGetResponse(asyncResult), 
      null); 
     return requestTask.ContinueWith(t => ReadStreamFromResponce(t.Result)); 
    } 

回答

4

該物業是在HttpWebResponse class(從WebResponse派生),而不是在基類中的代碼。

您需要將結果轉換爲適當的派生類以訪問狀態碼。

+0

A已經添加了另一種方法,我實際上正在創建並啓動WebRequest。我必須改變那裏的東西嗎? –

+0

@Rati_Ge你可能只需要施放它;它可能是* typed *作爲'WebRequest',但它可能實際上*是* HttpWebRequest'。 –

+1

由'HttpWebRequest'返回的'WebRequest'將是'HttpWebResponse',所以你可以安全地投射到它。就像'return requestTask.ContinueWith(t => ReadStreamFromResponce((HttpWebResponse)t.Result);' – carlosfigueira