【发布时间】:2012-12-17 09:53:47
【问题描述】:
在我的自定义 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?
【问题讨论】:
-
抛出的异常肯定是 FtpException(或派生类型)吗?
-
是的,但为了确保,我将 catch 块更改为 catch System.Exception - 结果是一样的
-
好的,您是否尝试过单步执行以查看调用异常时会发生什么?是否有可能是 ftpClient.Login 抛出了一个异常,它被你的 catch 捕获了,然后 another 异常被最终尝试关闭已经关闭的 ftpClient 生成?
-
啊 - 这可能是问题所在 - 虽然这段代码在本地工作并且只有在进入 Azure 时才会崩溃,所以很难说。 Orchard 日志将错误突出显示为登录调用而不是关闭调用。将尝试处理 finally 块并报告 - 谢谢
-
太棒了——这正是问题所在。在 finally 块中抛出了另一个异常 - 如果您愿意将其转化为答案...
标签: asp.net-mvc error-handling orchardcms