如何避免asp.net应用程序中的运行时错误页

如何避免asp.net应用程序中的运行时错误页,asp.net,error-handling,Asp.net,Error Handling,我有一个asp.net应用程序。当我打开该应用程序时,我收到一个运行时异常,其描述是:“在执行当前web请求期间发生了一个未处理的异常。请查看堆栈跟踪,以了解有关错误的详细信息以及错误源于代码的位置” 当我遇到这种运行时异常时,我想将页面重定向到其他某个aspx页面。我在web.config文件中添加了自定义错误标记,如下所示: <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" /> 但我

我有一个asp.net应用程序。当我打开该应用程序时,我收到一个运行时异常,其描述是:“在执行当前web请求期间发生了一个未处理的异常。请查看堆栈跟踪,以了解有关错误的详细信息以及错误源于代码的位置”

当我遇到这种运行时异常时,我想将页面重定向到其他某个aspx页面。我在web.config文件中添加了自定义错误标记,如下所示:

<customErrors
   mode="RemoteOnly" 
   defaultRedirect="~/Error.aspx" />


但我仍然会看到运行时错误页面,而不是错误页面。

确保您的customErrors模式处于打开状态,而不是关闭或RemoteOnly。后一个选项似乎是默认选项,但仅在本地发出页面请求时才起作用。

RemoteOnly指定自定义错误仅显示给远程客户端,而ASP.NET错误显示给本地主机(从)。

您是否在开发机器上看到这些错误?如果是这样,那么这是正确的行为,您可以尝试使用customErrors=“off”。

如您所知,选项为On、off和RemoteOnly

  • RemoteOnly意味着如果您在本地浏览,您将无法获得自定义错误页面;您将获得ASP.NET的内置异常页面。如果您正在远程浏览(即,不是在提供应用程序的物理计算机上),那么您将看到Error.aspx。我几乎再也不用这个设置了
  • On表示无论发生什么情况,如果出现错误,您都会看到error.aspx。我倾向于在生产环境中使用
  • Off意味着无论发生什么,您都会看到ASP.NET的框内错误页面(异常页面)。Off不建议用于生产,但通常是我在测试服务器上使用的,因为我需要堆栈跟踪。:)

所有这些都基于Error.aspx,当然,它不会抛出自己的异常。如果Error.aspx抛出它自己的未处理异常,那么所有赌注都将被取消——您将获得一个默认的ASP.NET异常页面。

在我的Global.asax文件中设置一个应用程序错误事件处理程序,我已经实现了错误的服务器传输。现在我想设置一个特定的页面来处理404错误。如何检测404错误并调用404特定页面

这个问题的主要答案是检索首先触发事件的异常。为此,我们调用Server.GetLastError():

我们接下来需要做的是确定异常是HttpException还是其他什么。一旦我们确定这是一个HttpException,我们就可以访问特定于Http的属性和方法,这些属性和方法将为我们提供我们正在寻找的其余信息。在本例中,我们希望调用GetHttpCode()方法,该方法将返回Http状态代码并将其与数字404进行比较

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();

    if (ex is HttpException)
    {

        if (((HttpException)(ex)).GetHttpCode() == 404)
            Server.Transfer("~/Error404.aspx");
    }

    // Code that runs when an unhandled error occurs

    Server.Transfer("~/DefaultError.aspx");
}