Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在asp.net中加载页面的全局try-catch(本例中为vb)_Asp.net_Vb.net_Exception Handling - Fatal编程技术网

用于在asp.net中加载页面的全局try-catch(本例中为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

我得到的是:

SecureBasePage.vb将由需要登录的页面继承 继承SecureBasePage的Default.aspx 应该是什么情况:客户端请求Default.aspx,但由于未登录而被重定向到login

SecureBasePage.vb具有此构造函数

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中这样做更好,但是您能给我一篇文章或其他东西来解释自定义异常的“最佳实践”使用以及为什么不以这种方式使用它,因为我需要向主管解释这一点。他有点坚持使用异常,在本例中,您使用异常来控制逻辑流,这是成本大于效益的。除非您要记录有关异常的特定信息,否则使用简单条件会更有效。抛出和处理异常可能代价高昂,因此应该考虑实施异常。有关更多详细信息,请参阅本文:感谢您的评论:。它非常有用。关于应用程序错误的含义,我在问题中所说的是真的吗?