Global.asax没有捕获错误?

Ari*_*yck 4 c# asp.net error-handling global-asax

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

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

oops.aspx 能够提取错误,生成一个很好的电子邮件到服务器,并向用户显示一条错误消息.

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

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

<customErrors mode="On" defaultRedirect="oops.aspx"></customErrors>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Dar*_*rov 6

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

  • @VoodooChild,如果你在IIS 6.0中以经典模式运行,当有人试图访问例如`/ myapp/foo.jpg`时,将永远不会遇到Application_Error.ASP.NET甚至不会收到此请求的通知.IIS将直接提供图像.在集成管道模式下,所有请求都通过托管处理程序. (3认同)