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

本文关键字:HttpWebRequest 处理 错误 WP7 | 更新日期: 2023-09-27 17:59:16

使用WebClient类时,可以使用检查错误和空结果

e.error!=空

e.result==空

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

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

HttpWebRequest使用IAsyncResult和Begin/End对进行操作。

您将向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
     }
 }

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

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

您可以使用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