c# - ASP.NET 错误处理问题

标签 c# asp.net

我是 ASP.NET 的新手,我有一个非常基本的站点,我只想获取所有应用程序错误并将它们通过电子邮件发送给我,同时为用户提供一个错误页面。我读了很多关于这个主题的文章,似乎有很多信息。以下是我的想法,但我在将异常保留在 session 中时遇到问题,因此我可以通过电子邮件将其发送给我。

我一直在 Error.aspx.cs 文件的 ex.Message 上收到 NullReferenceException was unhandled by user code

有什么想法吗?

Global.asax.cs-

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();

    HttpContext.Current.Response.Redirect("~/Error.aspx");
}

Error.aspx.cs-

public partial class Error : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Exception ex = (Exception)Session["Exception"];
            this.SendEmail(ex);
            Session.Remove("Exception");
        }
    }

    private void SendEmail(Exception ex)
    {
        string body = "An exception occured at "
                    + DateTime.Now.ToLongTimeString()
                    + " on " + DateTime.Now.ToLongDateString()
                    + "<br />" + ex.Message; //ERROR HERE
        MailMessage msg = new MailMessage("from@email.com", "to@email.com");
        msg.Subject = "Exception in Portal Website";
        msg.Body = body;
        msg.IsBodyHtml = true;
        SmtpClient client = new SmtpClient("localhost");
        client.Send(msg);
    }
}

最佳答案

你的问题是你从来没有设置Session["Exception"],所以在你的Error.aspx上,Exception ex总是将为 null... 然后执行 ex.Message 将抛出 NullReferenceException。即使您修复了该问题并适当设置了 Session["Exception"],您所做的也不理想。

  1. 您可以从 Application_Error 函数发送电子邮件。

  2. 您的Response.Redirect ( MSDN Entry ) 将导致另一个异常 (ThreadAbortException)

  3. 你应该看看实现 ELMAH .它易于实现,可以做您想做的一切。

但是如果您只想修复您的代码,只需将发送电子邮件逻辑移至 Application_Error,然后您就不必担心 Session

关于c# - ASP.NET 错误处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884125/

相关文章:

c# - 为什么 IE9+ 上的网络浏览器不支持 document.createEvent 以及如何修复它?

c# - Automapper 中的对象返回 null

c# - 缓冲与流式传输大型数据集

c# - 找不到类型或命名空间 "RestSharp"和 "System"

c# - 在 C# 中调用由参数确定的方法

c# - 如何访问网络中的 C$ 份额?

c# - `ScrollToCaret` 滚动到所选文本的末尾,如何滚动到它的开头?

asp.net - Visual Studio 2008 是否具有适用于 ASP.NET 的 Web.config.Debug 和 Web.Config.Release?

asp.net - 使用 asp.net 登录控件的部分站点 SSL

c# - 如何找到两个日期之间的年月差?