尝试创建自定义错误警报

时间:2012-08-28 12:36:52

标签: c# asp.net error-handling

我尝试创建自己的自定义错误页面。 (没有原创)基本上当自定义错误页面被点击时,它将获取错误的URL并登录该用户名,并向我发送一个简短的smtp电子邮件。它实际上工作得很好但它在我测试的页面上疯狂地收到这些电子邮件,我认为没有任何问题。我想尝试获取有关为什么调用此自定义错误页面的一些信息,以便我可以尝试解决问题。

有人会有任何建议,所以我可以增强此页面,以便为我提供更多信息。

 protected void Page_Load(object sender, EventArgs e)
    {
        string url = HttpContext.Current.Request.Url.AbsoluteUri;
        string DATETIME = DateTime.Now.ToString();
        string UserName = HttpContext.Current.User.Identity.Name.ToString();

        string fileName = Server.MapPath("_TextFiles/error.txt");
        string mailBody = File.ReadAllText(fileName);

        mailBody = mailBody.Replace("##url##", url);
        mailBody = mailBody.Replace("##DATETIME##", DATETIME);
        mailBody = mailBody.Replace("##UserName##", UserName);

        MailMessage myMessage = new MailMessage();
        myMessage.Subject = "Response from ";
        myMessage.Body = mailBody;

        myMessage.From = new MailAddress("*******n.com", "******");
        myMessage.To.Add(new MailAddress("*********.com", "******"));

        SmtpClient mySmtpClient = new SmtpClient();
        mySmtpClient.Send(myMessage);

    }

文本文件,所以你不会混淆。

Hello,

Response from Error.aspx


An error occured on page ##url##

at ##DATETIME##


Username: ##UserName##

1 个答案:

答案 0 :(得分:2)

我的网站具有相同的基本设置,但您需要稍微更改一下方法。如果您从错误页面发送电子邮件,则该例外不再可用。这就是我做的......

我扩展System.Web.UI.Page类并使用以下内容覆盖OnError方法:

protected override void OnError(EventArgs e)
{
    base.OnError(e);

    System.Exception ex = Server.GetLastError();
    Log.LogError("Error in Supr.CMS.Types.SuprPage", ex, Log.LogLevel.HandledExceptionFatal);
}

我现在使用它作为所有页面的基类,我会收到有关完整详细信息的所有错误的通知。我包括异常消息和堆栈跟踪以及一些用户信息(包括IP地址和UserAgent),cookie集合,会话集合,表单集合和缓存集合,因此当用户遇到错误时我尽可能地了解站点的状态(这里发帖有点太多了。)

另一个注意事项......很多错误都是由机器人生成的,并且像IP和UserAgent这样的信息允许我打破它并增强我的请求阻止。