我收到“远程服务器返回错误:(403) Forbidden。” 错误并希望捕获此异常。我猜 HttpException 块应该如下所示捕获它,但它不是。
catch (HttpException wex)
{
if (wex.GetHttpCode().ToString() == "403")
//do stuff
}
我不想使用通用异常块来捕获它。还有什么其他异常可以捕捉到这一点?
请参阅随附的异常快照屏幕截图。
我收到“远程服务器返回错误:(403) Forbidden。” 错误并希望捕获此异常。我猜 HttpException 块应该如下所示捕获它,但它不是。
catch (HttpException wex)
{
if (wex.GetHttpCode().ToString() == "403")
//do stuff
}
我不想使用通用异常块来捕获它。还有什么其他异常可以捕捉到这一点?
请参阅随附的异常快照屏幕截图。
看起来异常被包装在另一个 API 级异常对象中。您可以有条件地捕获您所追求的特定异常,否则重新抛出。使用这个助手:
static T GetNestedException<T>(Exception ex) where T : Exception
{
if (ex == null) { return null; }
var tEx = ex as T;
if (tEx != null) { return tEx; }
return GetNestedException<T>(ex.InnerException);
}
然后你可以使用这个 catch 块:
catch (Exception ex)
{
var wex = GetNestedException<WebException>(ex);
// If there is no nested WebException, re-throw the exception.
if (wex == null) { throw; }
// Get the response object.
var response = wex.Response as HttpWebResponse;
// If it's not an HTTP response or is not error 403, re-throw.
if (response == null || response.StatusCode != HttpStatusCode.Forbidden) {
throw;
}
// The error is 403. Handle it here.
}
看一下堆栈跟踪,而不是抓住它。如果代码不允许您不捕获它,并将其打印到标准错误流中。这将允许您查看异常类型并try
相应地执行您的阻止。