asp.net – 将上一个错误传递给自定义错误重定向的最佳方法?
想知道你对这个解决方案的看法,如果这是将错误信息传递给自定义页面的正确方法吗?
在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中).
我要改变的一件事是错误页面本身.不要显示错误,请考虑将文本框添加到错误页面作为可选字段,用户可以在其中输入其电子邮件地址并单击按钮将错误报告发送给您.然后,当您收到错误报告时,您可以查看问题并回复它们.这是一种更加用户友好的方式,对于我已经完成此操作的网站来说,它的效果非常好. 沿着这些方向,您可能还希望收集表单数据,会话数据和其他任何有价值的内容,并将其放入错误报告中.这可以使诊断问题更容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何直接将ASP.NET MVC1升级到MV
- asp.net核心 – ASP.NET vNext – 编译代码动态不
- asp.net-mvc – 为什么在Razor中使用Html.Render
- asp.net – 在会话中存储相当大量的数据是否可以
- asp.net – 将SVN与Visual Studio 2003集成
- 是否可以运行异步调用来在ASP.NET中设置会话?
- ASP.NET MVC 4 AJAX提交表单不工作
- ASP.NET Web API 2:通过本机移动(iOS)应用程序与
- asp.net – 在IIS 7.5上使用传出异步Web请求时的
- asp.net – 错误HTTP 404.11通过查询字符串传递帐