2011-06-16 87 views
4

當使用WebClient類,你可以檢查錯誤和空的結果通過使用如何處理WP7中的HttpWebRequest錯誤?

e.error!= NULL

e.result == NULL

。我將如何使用HttpWebRequest類來處理這個問題?所有示例似乎都忽略了這一點,但它在應用程序中至關重要

回答

2

HttpWebRequest的使用IAsyncResult和開始/結束對一個操作。

您將傳遞一個回調方法委託給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 
    } 

} 
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

+2

Silverlight不會執行同步Web操作,在Silverlight中沒有'GetResponse'只有'[Begin/End] GetResponse'。 – AnthonyWJones 2011-06-17 07:34:13

+0

如果您轉到鏈接(代碼片段來自哪裏),您會看到這個概念是相同的:使用try-catch獲取GetResponse。同步或異步操作在這裏並不重要。 – Jim 2011-06-17 09:43:58

2

嘗試REST客戶端框架像Spring.Rest(上的NuGet「Spring.Rest」),它會做這一切的樣板代碼爲你:

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