民间,
我的应用程序主要是一个包含大量用户控件和自定义控件的页面。正在使用ASP.Net WebParts。网页及其母版页几乎没有代码:它们都是各种组件。
设计要求包括错误消息显示面板。客户希望应用程序在错误消息显示中显示应用程序的任何部分中发生的任何错误,而不是转到自定义错误页面。 (这是最近的决定:当我们开始时,我们正在考虑自定义错误页面。)
据我所知,WebParts不提供任何默认错误处理(不捕获错误和显示消息),并且当发生内部错误时,用户控件不一定会触发它们的OnError事件。
所以我正在考虑将Try ... Catch块中的所有内容包装起来,至少在演示级别,并进行处理。所以我的问题是:是否有任何简单的方法来实现一种全局或至少类范围的错误处理程序,它将以我选择的方式处理错误,中断正在执行的例程,但返回(处理后) )失败的方法的调用者?
我愿意调整代码以验证子例程是否符合预期,并返回适当的值(例如:非空数据对象。)我不想要的是将整个过程中止到顶部,跳过渲染,或(当然)着名的黄色和白色屏幕。
我想这是面向方面编程的一个案例,但我不认为ASP.Net提供了类似的东西。我也没有得到EntLib 5.0的印象。
如果有可能用一个属性来装饰一个方法,我会很喜欢它,这个属性意味着“在错误调用这样一个类似静态的方法”这样的类。但我怀疑它是,但是。
欢迎任何建议。
谢谢,
Ann L.
答案 0 :(得分:3)
对于初学者来说,将Try Catch处理程序放在应用程序的每一段代码中都是不好的做法。每次设置时都会有轻微的性能损失,这可能会让事情变得非常快。
在Global.asax.cs(或.vb)文件中,有一个名为Application_Error的方法,它是全局错误处理程序。这将捕获您之前未在应用程序中捕获(或抛出)的任何错误。
您可以轻松地将错误处理代码放在此处。它可以简单到将错误消息转储到日志以供将来查看,或者检查异常类型(SQL与文件与HTTP)并执行与该类型相关的错误处理任务。
答案 1 :(得分:3)
你需要看看elmah。如果你谷歌'elmah'它有一个错误模块/处理程序,几乎可以满足您的需求(虽然它需要一些额外的调整..)
你可能想考虑让你的错误'冒泡'但是...编写一堆Try..Catch..Finally块有一些严重的性能问题......