asp.net-mvc - 已处理的 Orchard 异常仍在冒泡

标签 asp.net-mvc error-handling orchardcms

在我的自定义 Orchard 模块中,我在 Controller 操作中编写了一些 ftp 客户端代码,这些代码在登录期间恰好抛出自定义 FtpException。我已将登录代码包装在 try-catch 中,如果出现错误,则会将通知消息发送回 View 。问题是错误仍在冒泡,并显示标准的“哎呀。出了问题......抱歉”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 block 中的代码被执行,因此我知道异常已被处理。问题是,Orchard 仍然显示未处理的异常行为。如何阻止异常冒泡以便我的 RedirectToAction 触发?

最佳答案

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

  1. 执行进入try,并调用Login(),并抛出异常。
  2. 执行跳转到您的 catch block ,该 block 尝试在您的 ftpClient 对象上调用 Close()
  3. 我不确定 ftpClient 的确切类型,但在不一定已打开的实例上调用 Close() 是有意义的(通过 Login )会抛出另一个异常,而 Orchard 的异常处理程序正在捕获该异常。

我首先会在 FTP 客户端类中查找(或添加)某种 IsOpen 属性,或者将 Login 调用包装在单独的 try/中catch 以便您可以区分登录失败和其他失败。或者,如果您有权访问源代码,则可以使用 Login 在失败时抛出不同类型的异常。

关于asp.net-mvc - 已处理的 Orchard 异常仍在冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911799/

相关文章:

asp.net-mvc - 带有 tab-id 的 RedirectToAction()

haskell - 在 Haskell 中使用映射时跳过异常

excel - 有没有办法在错误循环中捕获VBA代码?

asp.net - Orchard CMS 高级菜单 - 用干净的菜单小部件替换基于 Superfish 的菜单小部件

c# - 使用 mvc 身份注册电话号码而不是电子邮件

javascript - 如何在 html.actionlink 中仅调用 javascript 函数

javascript - 无法使用 Jquery 获取 @Html.RadioButtonFor 的值,已检查属性未更改

java - 在内部服务器错误上发送电子邮件

orchardcms - Orchard 1.5 在 ContentMenuItem 中添加类或 ID

orchardcms - 用于多个网站的单个 Orchard CMS 站点或为每个站点安装