在C#中捕获所有GetResponse异常类型

时间:2014-03-23 21:31:24

标签: c# exception exception-handling try-catch

HttpWebRequest.GetReponse()有4种类型的异常MSDN
  - System.InvlaidOperationException
  - System.Net.ProtocalViolationException
  - System.NotSupportedException
  - System.Net.WebException

我想捕获GetResponse()抛出的所有异常,其中一个catch {}用于所有GetResonse()异常,或者catch {}用于GetResponse()抛出的每种类型的异常,并用另一个catch {}来捕获所有其他异常。

在我读过的所有内容中,我只看到WebException被抓住了。是因为它捕获了GetResponse()抛出的所有内容,还是因为其他异常更通用而且会被其他异常抛出?

请考虑以下代码:

try  
{
    //a bunch of code...
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    //the rest of the try block...
}
catch (WebException e)
{
    Console.WriteLine("You caught a WebException: " + e.Message);
    throw;
}
catch (Exception e)
{
    Console.WriteLine("This exception was not from getResponse: " + e.Message);
    throw;
}

*我故意在这里扔。它需要由堆栈中的其他呼叫者处理。

或者,要捕获GetResponse抛出的所有异常,我会做这样的事情吗?

catch (WebException e)
{
    Console.WriteLine("You caught a WebException: " + e.Message);
    throw;
}
catch (InvalidOperationExceltion e)
{
    // Do stuff...
}
catch (ProtocolViolationException e)
{
    // Do stuff...
}
catch (NotSupportedException e)
{
    // Do stuff...
}
catch (Exception e)
{
    // Do stuff...
}

我确信它和我想的一样简单,但是我找不到人们捕获的例子而不是WebException。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用第二个代码,但为什么在处理GetResponse抛出的异常时会处理所有其他异常?额外的“捕获”是IMO不必要的。