gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:17 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com