0

这个问题有点与在 ASP.NET 中优雅地处理 URI hacking有关,因为它也是关于如何最好地处理在 ASP.NET 请求生命周期中发生的异常。我找到了一种优雅地处理大多数异常的方法,但是后来我发现一些异常在请求中发生得太晚了,以至于无法执行诸如Server.Transfer将整个错误表示逻辑划分到其自己的页面中之类的事情。

因此,我必须改为处理Application_Error事件内部的异常,然后执行Response.Writes 和诸如此类的操作。它很丑。我知道在某些情况下响应流可能已经被刷新,因此传输请求并不是一个真正的选择。我想问的是,是否有人找到了解决这个问题的优雅方法?

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

如果它在生命周期的后期,我可能不得不Response.Write直接从做Application_Error,但如果它是早期的,我可以做Server.Transfer。问题是,如果它太在请求中,那么尝试做Server.Transfer本身就会导致异常。

那么,是否有一个全局枚举或类似的东西可以表明是否为时已晚对响应做创造性的事情?

4

3 回答 3

2

我已经使用这种方法来捕获在 Web 控件或页面中生成的所有错误。它需要您做的就是从一个基类(一个用于页面,一个用于用户控件)继承,每个页面或用户控件都可以实现自己的 HandleException 方法并执行它需要执行的任何操作。完整代码在这里:

asp.net / MOSS2007 的透明通用异常处理(带代码)

于 2009-03-02T07:07:00.587 回答
0

我认为我对此的建议是使用带有 WMI 事件提供程序的 ASP.NET 健康监控来解决错误:

这是一个方法。

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

希望这可以帮助:

安德鲁

于 2009-02-27T09:59:03.287 回答
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 源并检查它是如何做到的。

于 2009-03-02T07:35:41.377 回答