2

在我的 ASP.NET 应用程序中,我正在编写一个常见的错误页面,我想在其中显示以下内容:

  1. 异常堆栈跟踪(适用于管理员)。
  2. 错误消息(适用于所有)。
  3. 事件 ID。

方法如下:

  1. 定义了一个自定义类,如下所示,并使用 Session 将对象保存在 Global.asax
  2. 在错误页面中检索该对象并显示错误。

    public class CustomErrorInfo
    {
        public string EventId { get; set; }
        public string ExceptionTrace { get; set; }
        public string ErrorMessage { get; set; }
        public string ContextInfo { get; set; }
    
        public override string ToString()
        {
            return (EventId + "\n" + ExceptionTrace + "\n" + ErrorMessage + "\n" + ContextInfo + "\n");
        }
    }
    

Global.asax 文件:

void Application_Error(object sender, EventArgs e)
{
    var customErrorMessage = new  CustomErrorInfo();
    customErrorMessage.EventId = Guid.NewGuid().ToString();

    Exception exception = Server.GetLastError();

    customErrorMessage.ExceptionTrace = exception.ToString().Replace("\n","");

    customErrorMessage.ContextInfo = DateTime.Today.ToLongDateString();

    customErrorMessage.ErrorMessage = "An unhandled error.";

    Response.Redirect("WebForm1.aspx?MsgId=" + customErrorMessage.EventId + "&Msg=" + customErrorMessage.ErrorMessage +
        "&MsgTrace=" + customErrorMessage.ExceptionTrace + "&MsgContext=" + customErrorMessage.ContextInfo);

    // Code that runs when an unhandled error occurs

}

但是我的是一个 Azure 应用程序,因此不推荐使用 Session 来保存异常信息等对象,因为在这种情况下不推荐。

因此寻找一种方法,我可以通过这种方法以最适合错误页面的方式传递自定义对象。

我正在寻找一些使用帮助:

  • JSON(使用查询字符串)
  • Javascript 或
  • 在不使用会话上下文的情况下,我可以将自定义对象传递到错误页面的任何其他方式。
4

2 回答 2

1

使用 ELMAH 和 Windows Azure 表存储怎么样,请查看 Wades 博客,“在 Windows Azure 中使用 ELMAH 和表存储”:http ://www.wadewegner.com/2011/08/using-elmah-in-windows-带有表存储的天蓝色/

于 2012-04-22T20:46:21.980 回答
1

您可以使用 Server.Transfer 将您带到错误页面。这允许您在内存中维护页面状态(使用 HttpContext.Items 集合)。尽管在某些情况下您需要禁用输出缓存。HttpContext.AllErrors列表已包含在请求期间引发的任何异常。

在 Azure 表中存储错误详细信息将是一个更好的解决方案,因为您将能够查询错误详细信息并根据到达表的新消息设置事件。这里可能的问题是,如果 Azure 表存储首先是异常的原因。

最好的解决方案是使用Azure 诊断收集您的事件。这些可以配置为定期自动传输到存储。

于 2012-04-22T13:19:39.330 回答