我是 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"]
,您所做的也不理想。
您可以从
Application_Error
函数发送电子邮件。您的
Response.Redirect
( MSDN Entry ) 将导致另一个异常 (ThreadAbortException)你应该看看实现 ELMAH .它易于实现,可以做您想做的一切。
但是如果您只想修复您的代码,只需将发送电子邮件逻辑移至 Application_Error
,然后您就不必担心 Session
。
关于c# - ASP.NET 错误处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884125/