【问题标题】:handling Application_Error in ASP.NET app's global.asax处理 ASP.NET 应用程序的 global.asax 中的 Application_Error
【发布时间】:2009-01-12 09:06:52
【问题描述】:

我希望在应用程序崩溃时向管理员发送邮件。 所以我只需在global.asax 中执行此操作:

void Application_error(object sender, EventArgs e)
{
    SendMessageToAdministarator(Server.GetLastError().ToString());
}

但实际上多次调用Application_Error,即使应用程序不会崩溃。

并且我希望仅在应用程序崩溃时向管理员发送邮件。

另外,我是否有一种简单的方法可以重新启动应用程序?

我正在寻找最简单的解决方案。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    当应用程序没有崩溃时会发送什么样的错误?您可以检查异常的类型,并且不要针对不会使应用程序崩溃的异常发送电子邮件(例如,重定向可能会引发我在代码中手动过滤的 ThreadAbortException):

    protected void Application_Error(Object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        if (ex is ThreadAbortException)
            return;
        Logger.Error(LoggerType.Global, ex, "Exception");
        Response.Redirect("unexpectederror.htm");
    }
    

    您可以添加指向错误页面的重定向,其中包含向用户显示发生错误的消息以及指向站点中相关页面的一些链接。这是为了“重新启动应用程序” - 我希望这是您想要的。

    您还可以考虑使用 log4net 进行日志记录,它还可以在服务器上记录错误发送有关错误的电子邮件。

    【讨论】:

    • 非常感谢。 “手动过滤代码”是什么意思?另外,我经常遇到的一个错误是一些 System.Web.HttpException: File does not exist。在 System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)... 但这不会造成任何明显的伤害
    • 我用代码示例更新了答案。您可以将 ThreadAbortException 替换为 HttpException。或者在那里添加多个检查以获取更多异常类型。
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2012-08-26
    • 2013-02-07
    • 2011-06-16
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多