2013-01-09 62 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