使用WebClient类时,您可以使用
检查错误并清空结果e.error!= null
和
e.result == null
分别。我将如何使用HttpWebRequest类处理此问题?所有示例似乎都忽略了这一点,但它在应用程序中至关重要。
答案 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