ASP.net - 报告错误的自定义错误页面

时间:2016-07-22 14:53:24

标签: asp.net

我试图对其进行设置,以便在我的asp.net网站中抛出错误时,生成的自定义错误页面会返回一个标识符,该标识符可用于在数据库中查找错误。< / p>

使用&#34; customErrors&#34;在web.config中设置自定义错误页面。功能。

  <customErrors defaultRedirect="~/Error/error.aspx" mode="RemoteOnly">
      <error statusCode="404" redirect="~/Error/error.aspx?status=404" />
  </customErrors>

我目前正在使用会话传递差距来传递ID。

在Global.asax

    protected void Application_Error(Object sender, EventArgs e)
    {
        Exception ex = HttpContext.Current.Server.GetLastError();
        var errorCode = ExceptionManager.Publish(ex);
        Session["ERROR_IDENTIFIER"] = errorCode;
    }

在CustomError页面中:

<%@ Page Language="C#" Debug="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Error Page</title>
  <link href="/Error/css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <%
     string errorIdentifier = Session["ERROR_IDENTIFIER"] == null ? "this is null" : Session["ERROR_IDENTIFIER"].ToString();
     Response.Write("There's been an error. Please send this identifier to service desk -> " + errorIdentifier);
  %>
</body>
<html>

不幸的是,这个工作流程中似乎发生的事情是customError页面的加载速度比global.asax的运行速度快。基本上这些是两个不同的操作,它们是分开运行的,我想这样做,以便自定义错误页面中包含正确的标识符。

谢谢, 亚历

2 个答案:

答案 0 :(得分:1)

这个Ans可能有另一个解决方案,或者可能是这样。 我的建议是在这种情况下不使用自定义错误处理

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

如果您正在寻找确切的标识符,那么您必须从global.ascx文件重定向错误页面,以便您可以获得错误的确切标识符,因为每次错误或异常Application_Error方法都将被执行。

protected void Application_Error(Object sender, EventArgs e)
{
    Exception ex = HttpContext.Current.Server.GetLastError();
    var errorCode = ExceptionManager.Publish(ex);
    Session["ERROR_IDENTIFIER"] = errorCode;
    Response.Redirect("~/Error/error.aspx");//Added
}

答案 1 :(得分:1)

请参阅此SO问题:ASP.NET custom error page - Server.GetLastError() is null

您正在重定向到错误页面并丢失Application_Error处理程序中的错误信息。

TL; DR:

将您的网络配置更改为以下内容:

   <customErrors defaultRedirect="~/Error/error.aspx" mode="RemoteOnly">
      <error statusCode="404" redirect="~/Error/error.aspx?status=404" redirectMode="ResponseRewrite"  />
  </customErrors>