0

我尝试创建自己的自定义错误页面。(没有原创)基本上,当自定义错误页面被点击时,它将获取错误的 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##
4

1 回答 1

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 之类的信息可以让我将其分解并增强我的请求阻止。

于 2012-08-28T18:39:50.820 回答