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

时间:2009-09-12 16:33:15

标签: asp.net error-handling

我有一个asp.net应用程序。当我打开应用程序时,我得到了一个运行时异常,其描述说:“在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取更多信息。错误以及它在代码“。

中的起源

当我得到这种运行时异常时,我想将页面重定向到其他一些aspx页面。我在web.config文件中添加了自定义错误标记:

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

但仍然得到运行时错误页面而不是错误页面。

4 个答案:

答案 0 :(得分:4)

如您所知,选项包括On,Off和RemoteOnly。

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

当然,所有这些都是基于Error.aspx而不是抛出自己的异常。如果Error.aspx抛出自己的未处理异常,那么所有的赌注都将关闭 - 您将获得一个默认的ASP.NET异常页面。

答案 1 :(得分:0)

确保您的customErrors模式为On,而不是Off或RemoteOnly。后一个选项似乎是默认选项,但仅在本地发出页面请求时才有效。

答案 2 :(得分:0)

RemoteOnly指定仅向远程客户端显示自定义错误,并且向本地主机显示ASP.NET错误(来自msdn)。
您是否在开发机器上看到了这些错误?如果是这样,那么这是正确的行为,您可以尝试使用customErrors =“off”。

答案 3 :(得分:0)

在我的Global.asax文件中设置Application_Error事件处理程序,我已经实现了错误的服务器传输。现在我想设置一个特定的页面来处理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");

}