Global.asax没有捕获错误?

时间:2012-03-14 17:38:02

标签: c# asp.net error-handling global-asax

我的项目有一个名为oops.aspx的错误页面。我们在global.asax中有以下代码:

protected void Application_Error(object sender, EventArgs e)
{
    Server.Transfer("~/oops.aspx", true);
}

oops.aspx能够提取错误,为服务器生成一封精美的电子邮件,并向用户显示错误消息。

使用Server.Transfer会保留网址,表单信息和其他有用的问题排查信息。在oops.aspx的某个时刻,在撰写电子邮件时,我抓住了Request.RawUrl并将其包含在电子邮件中。这是导致错误的页面的URL(带有查询字符串参数)。

我们在web.config中也有这个:

<customErrors mode="On" defaultRedirect="oops.aspx"></customErrors>

当系统由于基于此的错误而重定向时,它会重定向到/oops.aspx?aspxerrorpath=/Clients/EditClient.aspx(有时使用/,有时使用%2f路径分隔符)。 Querystring和Exception信息丢失,因此oops.aspx生成的电子邮件和消息很少,并且没有说明发生了什么。

我最近遇到了很多第二种错误。错误发生在一小束中,其中几个在几分钟内发生,然后在几个小时内没有发生。它们发生在整个网站上(包括在WebResource.axd之上),这让我觉得它不是我们网站中的特定错误,而是发生在较低级别的事情,如会话服务器问题或类似的事情。

所以,尽管如此,我的实际问题是:

我在网站上遇到错误,这些错误发生在他们没有被global.asax捕获的情况下。什么可能导致此类错误,以及如何解决这些错误?

1 个答案:

答案 0 :(得分:6)

由于您已在web.config中启用了自定义错误,因此将在Application_Error执行之前捕获异常并将您重定向到oops.aspx。如果您不希望发生这种情况,请不要在web.config中启用自定义错误。这样,假设您已将IIS配置为以集成管道模式运行应用程序池,则所有错误都将通过Application_Error