如何在ASP.NET请求生命周期中处理异常

时间:2009-02-27 09:34:31

标签: asp.net exception-handling error-handling lifecycle

这个问题与Handle URI hacking gracefully in ASP.NET有关,因为它也是如何最好地处理ASP.NET请求生命周期中发生的异常。我找到了一种方法来优雅地处理大多数异常,但后来我发现在请求中发生了一些异常,因为没有办法像Server.Transfer那样将整个错误表示逻辑分隔成自己的页。

所以,我必须在Application_Error事件中处理异常,并执行Response.Write s等等。它很丑。我知道在某些情况下,响应流可能已经被刷新,因此转移请求实际上不是一种选择。我想问的是,是否有人找到了解决这个问题的优雅方案?

此外,我发现很难知道何时可以通过将请求转移到另一个页面而不是优雅地处理异常。找出异常发生时我们处于请求生命周期中的哪个位置的最佳方法是什么?如果它在加载和呈现页面期间发生,Page_Error将能够处理它,我在那里做Server.Transfer时没有遇到任何问题。但是,如果异常发生的时间太早或太晚,Page_Error无法捕获它并且它会冒泡到Application_Error,我该怎么做才能知道它是早还是晚?

如果它在生命周期的后期,我可能必须直接从Response.Write执行Application_Error,但如果它很早,我可以Server.Transfer。问题是尝试执行Server.Transfer本身会导致异常,如果它在请求中也是如此。

那么,是否存在全局枚举或类似内容,表明在回复中做创意的内容是否为时已晚?

3 个答案:

答案 0 :(得分:2)

我已经使用这种方法来捕获Web控件或页面中生成的所有错误。它要求你做的只是从一个基类继承(一个用于页面,一个用于用户控件)每个页面,或者usercontrol可以实现自己的HandleException方法并做它需要做的任何事情。 完整代码:

Transparent generic exception handling for asp.net / MOSS2007 (with code)

答案 1 :(得分:0)

我认为我对此的建议是使用ASP.NET Health Monitoring和WMI Events提供程序来处理错误:

以下是如何使用。

http://msdn.microsoft.com/en-us/library/ms178713.aspx

希望这会有所帮助:

安德鲁

答案 2 :(得分:0)

我建议您使用asp.net配置为未处理的异常设置一般错误页面。来自示例web.config

    <!--
        The <customErrors> section enables configuration 
        of what to do if/when an unhandled error occurs 
        during the execution of a request. Specifically, 
        it enables developers to configure html error pages 
        to be displayed in place of a error stack trace.

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
    -->

在整个处理程序上,只需记录异常,然后让asp.net进行重定向。

如果您仍希望继续采用客户方法,我建议您查看可用的asp.net源代码并检查它是如何做的。

相关问题