Application_Error不触发?

6
在Webform1.aspx.cs文件中:
protected void Page_Load(object sender, EventArgs e)
{
    throw new Exception("test exception");
}

在Global.asax.cs文件中:
protected void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    if (Server.GetLastError() is HttpUnhandledException)
        Server.Transfer("ErrUnknown.aspx");
}

但是Application_Error事件处理程序从未被调用。相反,我得到了一个运行时错误页面。
在抛出异常后,我该怎么做才能使Application_Error被调用?

您的 web.config 文件中的自定义错误部分是什么? - Rich
你是指customErrors部分吗? - ChrisPeeters
是的,还要检查编译 Debug=True 是否已设置。 - Rich
返回空值,因为我希望异常在Application_Error中处理。 有什么想法为什么它没有被触发? 可能值得注意的是:我正在使用VS.NET WebApplication项目,而不是VS.NET WebSite项目。这可能是原因吗? - ChrisPeeters
2
我意识到这个问题已经解决了,但是对于任何阅读此内容的人来说,Customerrors部分和Debug=True对此没有影响。无论这些设置如何,错误都应该通过OnError和Global ASAX Error事件传递。请注意,如果抛出继承自ConfigurationException的异常,则不会通过OnError或Global ASAX错误事件处理,如此处所述...http://stackoverflow.com/questions/25299325/asp-net-onerror-not-catching-configurationerrorsexception - Mick
2个回答

5

看起来很好,Application_Error应该被调用了。

你有通过Debugging来检查你的应用程序吗?

实际上你缺少了Server.ClearError(),所以异常被传递到asp.net,但是你应该在这里抑制它,因为你自己正在处理它。

protected void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    if (Server.GetLastError() is HttpUnhandledException)
    {
        // suppressing the error so it should not pass to asp.net
        Server.ClearError();
        Server.Transfer("ErrUnknown.aspx");
    }
}

你好。调试器在 Page_Load 中断,停在抛出异常的语句处,并没有继续到 Application_Error。有什么建议吗? - ChrisPeeters

1

我找到了问题。

Server.Transfer("ErrUnknown.aspx")

原因是什么。

在尝试直接在浏览器中查看“ErrUnknown.aspx”时,我意识到该页面存在错误。纠正后,Server.Transfer可以正常工作。

然而,令人困惑的是,在调试应用程序时,事件不会被触发?

无论如何。


不确定这是否适用于所有人的解决方案。 - Johnny_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接