如果Web应用程序中发生任何错误,如何发送错误信息邮件

时间:2012-08-04 10:33:07

标签: asp.net .net c#-4.0

这里的场景是我有很多.aspx pages如果有任何页面出错,它会重定向到错误页面

Web.config

<customErrors mode="On" defaultRedirect="customErrorPage.aspx">
       <error statusCode="404" redirect="Error404.aspx" />
</customErrors>

如果我收到404错误,则会重定向到Error404.aspx

但如果他们的任何其他错误(禁止,连接丢失,服务不可用等)那么我想重定向到customErrorPage.apsx

我想在显示自定义错误页面时发送包含错误信息(错误页面名称,错误状态代码)的电子邮件,稍后几分钟后,它会自动将用户重定向到login.aspx

我试过(不工作)

void Application_Error(object sender, EventArgs e) 
{ 
        ex = (HttpException)Server.GetLastError();
        int errorcode = ex.GetHttpCode();
  //    Response.Redirect("Errorpage.aspx?id='" + errorcode + "'&msg='" + message + "'");
}

我的自定义错误页面

protected void Page_Load(object sender, EventArgs e)
{
         getUrl = HttpContext.Current.Request.Url.ToString();
        // string error=  HttpContext.Current.Error.ToString();
        //   HtmlMeta meta = new HtmlMeta();
       //   HtmlHead head = (HtmlHead)Page.Header;
        // meta.HttpEquiv = "refresh";
        //   meta.Content = "10;   url=Login.aspx";
        //  head.Controls.Add(meta);
}

protected void Page_UnLoad(object sender, EventArgs e)
{
       //send mail function
       Email.Send("abc@asa.com", "Error Log", "custom error", true);
}

还告诉我他们是否还有其他好方法

2 个答案:

答案 0 :(得分:3)

这是我如何解决的:

Globasl.asax:

 void Application_Error(object sender, EventArgs e) 
    {
        Exception objErr = Server.GetLastError().GetBaseException();
        string err = "<br><b>Error in: </b>" + Request.Url.ToString() +
            "<br><b>Error Message: </b>" + objErr.Message.ToString() +
            "<br><b>Stack Trace:</b><br>" + objErr.StackTrace.ToString();
       //Email sending method
       Email.Send("example@gmail.com", "Error", err, true);
    }

<强>的Web.config:

<customErrors mode="Off" defaultRedirect="Customerrorpage.aspx">
      <error statusCode="404" redirect="Error404.aspx" />
</customErrors>

Customerrorpage.aspx: (几秒后自动重定向到登录页面)

protected void Page_Load(object sender, EventArgs e)
    {
        Response.AppendHeader("Refresh", "4; url=Login.aspx");
    }

答案 1 :(得分:0)

我建议使用ELMAH - 它是专门用于记录未处理的异常(并且可以发信号以捕获其他异常)。

针对不同的配置有一些不同的nuGet包,包括通过电子邮件发送异常详细信息。

它以非常易读的方式捕获大量数据并对其进行格式化。