加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 将上一个错误传递给自定义错误重定向的最佳方法?

发布时间:2020-12-16 03:32:17 所属栏目:asp.Net 来源:网络整理
导读:想知道你对这个解决方案的看法,如果这是将错误信息传递给自定义页面的正确方法吗? 在web.config中: customErrors mode="On" defaultRedirect="~/Error.aspx"/customErrors 在Global.asax中: script RunAt="server" void Application_Error(object sender,
想知道你对这个解决方案的看法,如果这是将错误信息传递给自定义页面的正确方法吗?

在web.config中:

<customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>

在Global.asax中:

<script RunAt="server">
    void Application_Error(object sender,EventArgs e)
    {
    Exception ex = Server.GetLastError();
    if (ex != null && Session != null)
    {
        ex.Data.Add("ErrorTime",DateTime.Now);
        ex.Data.Add("ErrorSession",Session.SessionID);
        HttpContext.Current.Cache["LastError"] = ex;
    }
    }

</script>

在我的Error.aspx.cs中:

protected void Page_Load(object sender,EventArgs e)
{
    if (IsPostBack) return;

    if (HttpContext.Current.Cache["LastError"] != null)
    {
        Exception ex = (Exception)HttpContext.Current.Cache["LastError"];
        if (ex.Data["ErrorTime"] != null && ex.Data["ErrorSession"] != null)
            if ((DateTime)ex.Data["ErrorTime"] > DateTime.Now.AddSeconds(-30d) && ex.Data["ErrorSession"].ToString() == Session.SessionID)
                Label1.Text = ex.InnerException.Message;
    }
}

问题:我不想从Global.asax做一个Server.Transfer因为..我不知道.对我来说似乎很笨拙.希望能够将customErrors更改为RemoteOnly.所以必须在某处保存最后一个异常,但不能是Session,所以保存到Cache但是有一些额外的数据(时间和SessionID),因为Cache是??全局的,并且希望确保不向某人显示错误的错误.

我有点改变了我的代码.现在它只是:

void Application_Error(object sender,EventArgs e)
{
    HttpContext.Current.Cache["LastError"] = Server.GetLastError().GetBaseException();
    Server.ClearError();
}

…和…

protected void Page_Load(object sender,EventArgs e)
{
    if (IsPostBack) return;

    if (HttpContext.Current.Cache["LastError"] != null)
    {
        Exception ex = (Exception)HttpContext.Current.Cache["LastError"];
        if (ex != null)
            Label1.Text = ex.Message;
    }
}

注意SessionID不存在,如果匿名用户和ex.Data.Add已经存在的密钥会导致错误让我意识到调用ClearError很重要

解决方法

我认为这是一个体面的方式.这不是我这样做的方式,但我的代码太冗长而无法发布(在VB.NET中).

我要改变的一件事是错误页面本身.不要显示错误,请考虑将文本框添加到错误页面作为可选字段,用户可以在其中输入其电子邮件地址并单击按钮将错误报告发送给您.然后,当您收到错误报告时,您可以查看问题并回复它们.这是一种更加用户友好的方式,对于我已经完成此操作的网站来说,它的效果非常好.

沿着这些方向,您可能还希望收集表单数据,会话数据和其他任何有价值的内容,并将其放入错误报告中.这可以使诊断问题更容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读