我使用C#创建了一个简单的控制台应用程序。它创建一个类的实例并调用其中一个类的方法。此方法包含一个try-catch块,用于捕获System.Net.WebException类型的异常并重新抛出它,以便main方法可以捕获它并采取适当的操作。当我执行编译的应用程序时,异常不会传递给主类,用户永远不会看到我的自定义错误消息。相反,这个屏幕会弹出,告诉我有一个未处理的WebException(它是德语版,但我认为无论如何都可以识别; - )):
alt text http://img29.imageshack.us/img29/4581/crapq.png
这是我的类名为BuffaloRouter的方法:
public void Login()
{
string sUrl = _sUrl + "/somestuff.htm";
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(sUrl);
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(sUrl), "Basic", _credential);
request.Credentials = credCache;
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
_sContent = reader.ReadToEnd();
response.Close();
receiveStream.Dispose();
reader.Dispose();
_parseSessionIds();
}
catch (WebException)
{
throw;
}
}
这是我主要课程中的方法:
private static bool _login()
{
_router = new BuffaloRouter(_sIP, new System.Net.NetworkCredential("root", _sPassword));
try
{
Console.WriteLine("Login...");
_router.Login();
return true;
}
catch (System.Net.WebException)
{
_showErrorMessage("Could not connect to " + _sIP);
return false;
}
}
更新: 我感到有点尴尬,宁愿不谈论它。但是之前我曾几次没看过我在做什么;-) 我在运行应用程序时甚至没有调用主类中的方法。被调用的那个没有try-catch块,所以在我的类'方法中抛出的异常使应用程序做了它应该做的事,即CRASH !! 我很蠢,很抱歉浪费时间。
答案 0 :(得分:4)
如果您正在做的只是重新抛出异常,那么您首先不需要捕获它。只需从try...catch
方法中删除Login
。
完成后,暂时编辑代码以捕获常规异常并对其进行调试以找出实际引发的异常。完成后再次编辑代码以捕获该异常(仅此异常)。
答案 1 :(得分:1)
正如ChrisF所说,你不需要在Login
方法中重新抛出错误。如果你的catch块没有在_login
方法中运行,那么我猜你没有捕到正确的异常。
您是否肯定获得System.Net.WebException