在我的自定义Orchard模块中,我在控制器操作中编写了一些ftp客户端代码,恰好在登录期间抛出了自定义FtpException。我已经将登录代码包装在try-catch中,如果出现错误,我会向视图发送通知消息。问题是错误仍在冒泡并显示标准“哎呀。出错了...抱歉”Orchard错误消息。这是我要包装的代码:
try
{
ftpClient.Login();
ftpClient.Upload(fileName);
}
catch (FtpException ex)
{
services.Notifier.Error(T("There was an error sending the file - {0}.", ex.Message));
return RedirectToAction("Edit", "Project");
}
finally
{
ftpClient.Close();
}
services.Notifier.Information(T("File uploaded successfully."));
return RedirectToAction("Edit", "Project");
如果我查看Orchard日志,我会看到在ftpClient.Login()
内抛出了FTP异常。 catch块中的代码被执行,所以我知道已经处理了异常。麻烦的是,Orchard仍在显示未处理的异常行为。如何阻止异常冒泡,以便我的RedirectToAction可以触发?
答案 0 :(得分:2)
正如评论中所讨论的,可能发生以下情况:
try
,然后转到Login()
,并抛出异常。Close()
对象上调用ftpClient
。ftpClient
的确切类型,但有必要在一个可能不一定被打开的实例上调用Close()
(首先通过Login
)会抛出另一个异常,它是由Orchard的异常处理程序捕获的。我首先在FTP客户端类中查找(或添加)某种IsOpen
属性,或者将Login
调用包装在单独的try / catch中,以便区分登录失败和其他失败。或者,如果您有权访问源,如果失败,您可以让Login
抛出不同类型的异常。