如何在我的ASP.NET应用程序中创建“通用错误”页面,以便它处理在
在我的ASP.NET MVC应用程序中,我希望有一个通用的错误页面,它与返回的HTTP 500一起显示.像
this page on Stack Overflow这样的东西.
当然我想重用尽可能多的代码,以便页面的样式与我的应用程序中的其他页面的样式相同,所以我希望有一个ASP.NET页面重用母版页,而不是纯HTML文件.但是,如果我这样做,我有一个页面,其中包含一些服务器端可执行代码,用于创建提供给客户端的实际HTML.在Stack Overflow一般错误页面的情况下,代码检查用户是否已注册,检索他的代表等,并将其中的元素插入HTML. 该代码可能会失败,如果发生这种情况,页面就没有正确构造,并且服务器中会抛出异常. 如何正常处理这种情况(为错误页面构建HTML时出错)?什么是典型的方法? 解决方法
我想首先对可能的错误进行分类.
对错误进行分类. >找不到页面(这是我的日志). 我们的目标 现在显示错误页面,但仅限于极少数情况. 因此,当用户使用页面进行操作时,我们会尝试捕获用户的所有错误输入,并告诉他如何继续执行任何错误. 全局错误处理程序 您可以使用void Application_Error(对象发送方,EventArgs e)捕获global.asax上的所有错误. void Application_Error(object sender,EventArgs e) { try { Exception LastOneError = Server.GetLastError(); if (LastOneError != null) { Debug.Fail("Unhandled error: " + LastOneError.ToString()); if (!(EventLog.SourceExists(SourceName))) EventLog.CreateEventSource(SourceName,LogName); EventLog MyLog = new EventLog(); MyLog.Source = SourceName; StringBuilder cReportMe = new StringBuilder(); cReportMe.Append("[Error come from ip:"); cReportMe.Append(GetRemoteHostIP()); cReportMe.Append("] "); cReportMe.Append("Last Error:"); cReportMe.Append(LastOneError.ToString()); if (LastOneError.ToString().Contains("does not exist.")) { // page not found MyLog.WriteEntry(cReportMe.ToString(),EventLogEntryType.Warning,998); } else { MyLog.WriteEntry(cReportMe.ToString(),EventLogEntryType.Error,999); } } } catch (Exception ex) { Debug.Fail("Unhandled error: " + GlobalFun.GetErrorMessage(ex)); } string cTheFile = HttpContext.Current.Request.Path; // to avoid close loop and stackoverflow if(!cTheFile.EndsWith("error.aspx")) Server.Transfer("~/error.aspx"); } 这个全局错误句柄有一个主要目标,告诉我什么没有工作,并且在到达此处之前无法处理它,所以我记录它(不是记录它的方式)并很快修复它.当我调试我的代码时,我没有使服务器传输能够快速找到错误. 对于黑客错误案例 在这种情况下,最好现在显示任何错误,但只需通过重定向重新加载页面.如何知道它是否试图入侵该页面? 如果在回发后你得到你知道的参数的CRC / hach??错误.看看回答https://stackoverflow.com/a/2551810/159270以查看视图状态错误的示例以及如何处理它. 我知道MVC没有viewstate,但是你的代码上可能有其他加密字符串,或者某种安全性,你知道它什么时候坏了.这是一般的想法: if(IsPostBack && HashErrorOnParametres) { LogIt(); Responce.Redirect(Request.RawUrl,true); return; } 对于非常困难的一般错误 假设您的数据库根本没有打开,然后所有用户都开始从常规处理程序中看到错误页面.在那里你可能有一个额外的选项来重新启动池,或者在最后5分钟或类似的情况下20个错误后停止页面,并发送电子邮件来运行并修复这个非常困难的错误. 对于其余的软错误 我认为必须使用try / catch在页面内处理所有可能的已知错误,并向用户显示出现错误的消息,如果此错误来自用户,并且当然记录它以查看并修复它. 打破页面的部分,也许一部分是抛出错误,其余部分工作正常,如果这不是那么重要,你可以简单地隐藏这部分,并显示其余部分,直到你修复它.例如,如果您只显示有关产品的信息,并且说出一个部件的部分会抛出错误,您可以简单地隐藏此部件并在日志中查看并修复它. 有段时间我尝试使用受保护的覆盖void OnError(EventArgs e)来处理每页错误,但这对我没有帮助,我将其删除.我处理每个操作的错误,如果它们不重要,我会隐藏它们直到我修复它们. 其余的正常错误显示在用户身上,例如没有输入正确的数据……一条消息,告诉他们要修复的内容. 正如我所说,我的目标是根本不显示错误页面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET – 主页面中的更新面板,内容页面中的刷新按钮
- asp.net – 密码保护Elmah.axd文件
- asp.net – 如何摆脱包含GridView的空div
- asp.net – 如何在一个新的选项卡中打开asp:HyperLink.Nav
- ASP.NET MVC:从FileResult返回大量数据
- iis – NewRelic如何通过简单地安装.Net代理来工作?
- asp.net-mvc – MVC ASP.NET或Razor
- 在ASP.NET MVC4中自定义错误消息MVC的无效DateTime
- asp.net-mvc – 我应该在MVC应用程序中创建我的Entity Fram
- asp.net-core – ASP.NET Core缺少异常中的行号
- ASP.NET Core 2.0 Web API基于JWT自定义策略授权
- 将ASP.NET网站转换为原生Android / iOS应用程序
- asp.net – 如何使用自定义CSS与我的Sharepoint
- ASP.NET Development Server未更新对标记/代码的
- asp.net-mvc-3 – 避免服务器端Razor视图和客户端
- asp.net-web-api – WebApi:如何将状态从过滤器
- asp.net – Webservice方法返回XmlDocument,Refe
- ASP.NET Core 1.0 ConfigurationBuilder().AddJs
- asp.net-mvc – MVC 3依赖解析器或Ninject MVC插
- asp.net – 如何更改当前文化的数据格式,以便它适