1

我收到“远程服务器返回错误:(403) Forbidden。” 错误并希望捕获此异常。我猜 HttpException 块应该如下所示捕获它,但它不是。

catch (HttpException wex)
       {
       if (wex.GetHttpCode().ToString() == "403")
       //do stuff
       }

我不想使用通用异常块来捕获它。还有什么其他异常可以捕捉到这一点?

请参阅随附的异常快照屏幕截图。

在此处输入图像描述

4

2 回答 2

3

看起来异常被包装在另一个 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.
}
于 2013-09-06T18:18:12.557 回答
0

看一下堆栈跟踪,而不是抓住它。如果代码不允许您不捕获它,并将其打印到标准错误流中。这将允许您查看异常类型并try相应地执行您的阻止。

于 2013-09-06T15:57:54.330 回答