我正在开发一个ASP.NET Web应用程序。我正在为整个应用程序实现日志框架。
Web应用程序大约有7-8页,是一个简单的CRUD操作Web应用程序。
它是Azure托管的应用程序。以下是我遵循的用于记录和异常处理的方法。
1)在数据访问层和Click事件中添加了Try ... Catch块。
2)在捕获错误时,我将异常传播到Globabl.asax级别,并在Application_Error事件中将错误记录到事件日志和跟踪日志中。
3)在Global.asax文件中执行此操作后,我将重定向到错误页面以显示用户友好消息并链接到失败页面。
4)只是想知道这是否是一个很好的方法。
谢谢朋友们。
答案 0 :(得分:1)
您是否实际处理DAL上的异常(即记录,尝试修复等)?如果没有,那么try catch除了旋转周期之外没有任何用途。对于点击事件也是如此,但是在UI上处理错误并不是一个坏习惯,即使你没有真正对它们做任何事情,因为你会将用户从丑陋的错误页面转移到你自己的友好消息
单个错误页面工作正常,如果您真的无法处理抛出的异常。好处是上市时间,因为你写了一些珍贵的小代码,以避免向用户显示丑陋的信息。缺点是用户错过了上下文。我不是真正适应所有异常处理程序,除了作为备份(有一个错误我没想到超过我的第一个行处理程序)。
如果您基于HTTP状态进行处理并且使用配置,则会出现常见错误页面的变体。
另一种模式是设置自己的基页并使其作为错误处理程序。然后,您可以在发生错误时留出容器来填充。这种方法可以很好地添加上下文,因为用户仍然可以看到他所在页面的一部分,但是您已经给出了错误消息,因此他知道事情已经失败。我发现这个模式与用户控件一起使用时会在发生错误时添加到容器中,但这需要更多调整,因为您必须设置一个代码表和正确的消息来显示(这可能是错误的本身)。
答案 1 :(得分:0)
为什么不使用ASP.NET自定义错误页面?您可以为每个状态代码指定每个错误页面,也可以指定默认重定向。
您可以在网络配置中对此进行配置,并且您已完成设置。
<customErrors defaultRedirect="GenericError.htm" mode="On">
<error statusCode="404" redirect="notfound.htm"/>
</customErrors>
您可以将其配置为向所有用户显示自定义错误页面,或仅向远程用户等显示。
http://aspnetresources.com/articles/CustomErrorPages
我完全同意你应该记录catch块中的所有错误并将其写入日志。
答案 2 :(得分:0)
听起来你在这里重新发明轮子。 ASP.NET已经包含了一些可以帮助您实现所需结果的内容。除非你在错误之后需要处理逻辑来清理,否则我不会使用try catch块。查看ASP.NET Health Monitoring Overview的日志记录错误。至于显示自定义错误页面,请参阅How to create custom error reporting pages in ASP.NET by using Visual C# .NET。
答案 3 :(得分:0)
我认为,您不需要使用异常处理。假设您有一个表示层和一个业务逻辑层/ DataAccess层。
在说出Business Logic中的错误时,它将直接移至Application_Error Event下的Glogal.asax.cs文件,而不返回调用函数。在这里,您可以记录如下的错误消息....
HttpContext.Current.Server.GetLastError().InnerException.StackTrace
HttpContext.Current.Server.GetLastError().InnerException.Message
HttpContext.Current.Server.GetLastError().InnerException.Source
HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.FullName
HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.Name
HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.Namespace
现在,在Web Config中,您可以编写代码以将用户重定向到某个默认页面,如下所示。
<customErrors defaultRedirect="ErrorPage.htm" mode="On">
<error statusCode="404" redirect="ErrorPageNotFound.htm"/>
</customErrors>