當使用WebClient類,你可以檢查錯誤和空的結果通過使用如何處理WP7中的HttpWebRequest錯誤?
e.error!= NULL
和
e.result == NULL
。我將如何使用HttpWebRequest類來處理這個問題?所有示例似乎都忽略了這一點,但它在應用程序中至關重要
當使用WebClient類,你可以檢查錯誤和空的結果通過使用如何處理WP7中的HttpWebRequest錯誤?
e.error!= NULL
和
e.result == NULL
。我將如何使用HttpWebRequest類來處理這個問題?所有示例似乎都忽略了這一點,但它在應用程序中至關重要
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
}
}
你可以使用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
嘗試REST客戶端框架像Spring.Rest(上的NuGet「Spring.Rest」),它會做這一切的樣板代碼爲你:
RestTemplate client = new RestTemplate("http://exemple.com/");
client.GetForObjectAsync<string>("path/", r =>
{
if (r.Error != null)
{
}
});
Silverlight不會執行同步Web操作,在Silverlight中沒有'GetResponse'只有'[Begin/End] GetResponse'。 – AnthonyWJones 2011-06-17 07:34:13
如果您轉到鏈接(代碼片段來自哪裏),您會看到這個概念是相同的:使用try-catch獲取GetResponse。同步或異步操作在這裏並不重要。 – Jim 2011-06-17 09:43:58