用于在asp.net中加载页面的全局try-catch(本例中为vb)
我得到的是: SecureBasePage.vb将由需要登录的页面继承 继承SecureBasePage的Default.aspx 应该是什么情况:客户端请求Default.aspx,但由于未登录而被重定向到login SecureBasePage.vb具有此构造函数用于在asp.net中加载页面的全局try-catch(本例中为vb),asp.net,vb.net,exception-handling,Asp.net,Vb.net,Exception Handling,我得到的是: SecureBasePage.vb将由需要登录的页面继承 继承SecureBasePage的Default.aspx 应该是什么情况:客户端请求Default.aspx,但由于未登录而被重定向到login SecureBasePage.vb具有此构造函数 Public Sub () If userIsAuthenticated Then Else Throw New LoginException() End
Public Sub ()
If userIsAuthenticated Then
Else
Throw New LoginException()
End If
End Sub
这将导致异常LoginException。现在我想让它被一个全局异常处理程序捕获,该处理程序将客户端踢到login.aspx
我知道Global.asax中有一个函数Application_错误,但我认为这不是一个异常处理程序,因为它只接受Server.GetLastError,不捕获异常。因此,此功能更可能允许开发人员发送有关未处理异常的电子邮件。我将其称为“全局未处理异常处理程序”,而不是“全局异常处理程序”
有什么我可以尝试捕捉到的构造函数异常抛出吗?由于所有需要登录的页面都将继承自SecureBasePage类,因此在那里实现您的逻辑可能最有意义。只需重写其中一个页面方法(如OnLoad或OnPreLoad)即可处理重定向 我不建议依赖global.asax来处理错误,因此基类可能是最合适的位置 编辑 一般来说,您不应该使用异常来控制逻辑流。除非异常本身包含有用的日志信息,否则它的成本可能大于好处,尤其是对于几乎每个请求都要使用的逻辑 本文就此主题提供了一些有用的建议:
是的,但我想在全球范围内做这件事的原因是,我也想在全球范围内做我自己的例外。这样它就不会绑定到页面,而是globalIf如果所有需要此逻辑的页面都是从SecureBasePage继承的,那么通过继承的方式它已经是全局的了。另外,生成自己的异常不是一个好方法;自定义异常应该保留用于设计缺陷或限制。好吧,也许在SecureBasePage中这样做更好,但是您能给我一篇文章或其他东西来解释自定义异常的“最佳实践”使用以及为什么不以这种方式使用它,因为我需要向主管解释这一点。他有点坚持使用异常,在本例中,您使用异常来控制逻辑流,这是成本大于效益的。除非您要记录有关异常的特定信息,否则使用简单条件会更有效。抛出和处理异常可能代价高昂,因此应该考虑实施异常。有关更多详细信息,请参阅本文:感谢您的评论:。它非常有用。关于应用程序错误的含义,我在问题中所说的是真的吗?