gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:42:29 26 4
gpt4 key购买 nike

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

最佳答案

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

  • 执行进入try ,然后调用Login() ,并抛出异常。
  • 执行跳转到你的 catch block ,它试图调用 Close()在您的 ftpClient 上目的。
  • 我不确定 ftpClient 的确切类型, 但调用 Close() 是有道理的在一个不一定打开的实例上(首先通过 Login)会抛出另一个异常,它是被 Orchard 的异常处理程序捕获的。

  • 我会首先寻找(或添加)某种 IsOpen属性到 FTP 客户端类,或通过包装 Login调用单独的 try/catch,以便您可以区分登录失败和另一个失败。或者,如果您可以访问源代码,您可以获得 Login如果失败则抛出不同类型的异常。

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com