如何在WP7中使用HttpWebRequest处理错误?

时间:2011-06-16 23:37:22

标签: c# .net silverlight windows-phone-7 httpwebrequest

使用WebClient类时,您可以使用

检查错误并清空结果
  

e.error!= null

  

e.result == null

分别。我将如何使用HttpWebRequest类处理此问题?所有示例似乎都忽略了这一点,但它在应用程序中至关重要。

3 个答案:

答案 0 :(得分:2)

HttpWebRequest使用IAsyncResult和开始/结束对进行操作。

您将Callback方法委托传递给Begin操作,然后在该回调中为该操作调用End方法。要捕获可能在操作的异步部分中发生的错误,请在调用End方法时放置一个try块。

例如,当呼叫BeginGetResponse时,您可以回复此回调: -

 private void Callback(IAsyncResult asyncResult)
 {
     try 
     {
         HttpWebResponse resp =  (HttpWebResponse)myRequest.EndGetResponse(asyncResult);
     }
     catch (Exception e)
     {
         //Something bad happened during the request
     }

 }

答案 1 :(得分:2)

尝试像Spring.Rest这样的REST客户端框架(NuGet上的“Spring.Rest”),它将为您完成所有这些样板代码:

RestTemplate client = new RestTemplate("http://exemple.com/");
client.GetForObjectAsync<string>("path/", r =>
  {
    if (r.Error != null)
    {
    }
  });

答案 2 :(得分:0)

你可以使用try-catch。

try {
   // Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name.
     HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("invalid site");

    // Get the associated response for the above request.
     HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse();
    myHttpWebResponse.Close();
}
catch(WebException e) {
    Console.WriteLine("This program is expected to throw WebException on successful run."+
                        "\n\nException Message :" + e.Message);
    if(e.Status == WebExceptionStatus.ProtocolError) {
        Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
        Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
    }
}
catch(Exception e) {
    Console.WriteLine(e.Message);
}

http://msdn.microsoft.com/en-us/library/system.net.webexception.status.aspx