处理过的果园异常仍在冒泡

时间:2012-12-17 09:53:48

标签: asp.net-mvc error-handling orchardcms

在我的自定义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可以触发?

1 个答案:

答案 0 :(得分:2)

正如评论中所讨论的,可能发生以下情况:

  1. 执行进入try,然后转到Login(),并抛出异常。
  2. 执行跳转到catch块,该块尝试在Close()对象上调用ftpClient
  3. 我不确定ftpClient的确切类型,但有必要在一个可能不一定被打开的实例上调用Close()(首先通过Login )会抛出另一个异常,它是由Orchard的异常处理程序捕获的。
  4. 我首先在FTP客户端类中查找(或添加)某种IsOpen属性,或者将Login调用包装在单独的try / catch中,以便区分登录失败和其他失败。或者,如果您有权访问源,如果失败,您可以让Login抛出不同类型的异常。