Asp.net 已重定向到Default.aspx,而不是在异常页面上设置错误500

Asp.net 已重定向到Default.aspx,而不是在异常页面上设置错误500,asp.net,webforms,dotnetnuke,http-status-code-500,dotnetnuke-9,Asp.net,Webforms,Dotnetnuke,Http Status Code 500,Dotnetnuke 9,在DotNetNuke安装的站点设置中,我们为“500错误页面”设置了默认页面,如下所示。 设置此选项后,我们希望在发生错误时重定向。相反,我们仍然重定向到“Default.aspx?tabid=…”页面 为什么不显示正确的页面? 我们需要改变什么才能让它工作? (我们使用的是v9.02.00 366、.NET Framework 4.6) 编辑:下面是我如何使用自定义模块强制错误发生的 public partial class TriggerError500 : PortalModuleB

在DotNetNuke安装的站点设置中,我们为“500错误页面”设置了默认页面,如下所示。

设置此选项后,我们希望在发生错误时重定向。相反,我们仍然重定向到“Default.aspx?tabid=…”页面

为什么不显示正确的页面?
我们需要改变什么才能让它工作?

(我们使用的是v9.02.00 366、.NET Framework 4.6)


编辑:下面是我如何使用自定义模块强制错误发生的

public partial class TriggerError500 : PortalModuleBase
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(UserId == -1)
        {
            throw new NotImplementedException();
        }
    }
}

此模块已放置在公共页上,以测试错误500页。

如果我的记忆正常,您可能希望在web.config中尝试此操作:

<customErrors mode="On" defaultRedirect="500" />

只有当异常完全未处理时,才可能使用500错误页面。例如,如果一个异常是由开发人员处理的,那么页面上将显示一条友好的消息,其中一部分异常在URL中。这可能是你看到的URL的原因。它与讨论中的模块是同一页,但格式不同


如果不处理异常,通常会向访问者显示臭名昭著的“死亡黄屏”(YSOD)以及错误详细信息。根据web.config中的设置,详细级别将是通用或详细。我相信这是针对500错误页面的用例。此时您应该可以看到它。

可以在“安全”部分切换将影响平台级错误处理的设置


由于DNN处理模块和页面加载的方式,您正在编写的代码实际上不会触发HTTP 500错误,因为页面本身已正确加载。框架捕获模块加载错误,并将该错误记录到管理日志中,但会呈现页面本身

当无法连接到数据库或其他情况时,通常会出现HTTP 500错误,在这种情况下,DNN将遵守规则


您可以设置Response.StatusCode=500;然后结束响应并获得所需的行为,但我没有对此进行测试。

我只是尝试了一下,没有改变任何东西。我认为错误不会到达ASP.NET错误处理堆栈,因为它是由DNN在更高级别上处理的。可能是错的,但我仍然被重定向到Default.aspx。我相信此选项仅适用于您希望覆盖DNN功能并使用内置.NET功能作为替代的情况。我如何强制发生完全未处理的异常?任何由模块引发但未由模块开发人员处理的异常都会触发错误500页,是吗?在查看源代码时,我认为您不能轻易地从模块内部触发它。它被DNN框架很好地隔离了。仅当存在级联或终端异常甚至不允许加载页面时,您才会看到这一点。例如,可能会有关闭应用程序池的风险的东西。我已经使用了该设置,但其行为保持不变,只是它告诉您在打开时检查日志。DNN论坛讨论:DNN GitHub问题:我认为它应该触发HTTP 500错误。也许这应该是DNN中的配置选项,当模块抛出异常时会抛出HTTP 500错误。如果没有与数据库的连接,它也将无法加载“500”页,因为它存储在DNN中。它可能会加载CustomErrors中设置的500.aspx页面,对吗?我们有没有办法自定义此行为?