Как обрабатывать ошибки с HttpWebRequest в WP7? - PullRequest
4 голосов
/ 17 июня 2011

При использовании класса WebClient вы можете проверить ошибки и пустые результаты, используя

e.error! = Null

и

e.result == ноль

соответственно. Как бы я справился с этим, используя класс HttpWebRequest? Все примеры, кажется, опускают это, но это жизненно важно в приложениях.

Ответы [ 3 ]

2 голосов
/ 17 июня 2011

HttpWebRequest использует для операции пары IAsyncResult и Begin / End.

Вы передадите делегат метода Callback в операцию Begin, а затем в этом обратном вызове вы вызовете метод End для этой операции. Чтобы поймать ошибку, которая могла произойти в асинхронной части операции, вы помещаете блок try вокруг вашего вызова метода End.

Например, при вызове BeginGetResponse вы можете передать этот вызов обратно: -

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

 }
2 голосов
/ 17 июня 2011

Попробуйте клиентскую среду REST, такую ​​как Spring.Rest ("Spring.Rest" на NuGet), он сделает весь этот стандартный код для вас:

RestTemplate client = new RestTemplate("http://exemple.com/");
client.GetForObjectAsync<string>("path/", r =>
  {
    if (r.Error != null)
    {
    }
  });
0 голосов
/ 17 июня 2011

Для этого вы можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...