什么可能导致Application_Error不被调用?

时间:2009-09-30 15:38:36

标签: c# asp.net exception-handling error-handling global-asax

在过去的两周里,我有一个案例,我无法弄明白,也许你们已经解决了同样的问题或者耳朵/阅读它并且可以帮助我。

我有一个ASP.NET项目,我在我的机器和其他机器上运行很好,每当我尝试调节QueryString时,我得到一个由System.Exception抛出的错误

问题是,在这个特定的机器(女巫在荷兰),Application_Error永远不会捕获Exception,它将Exception消息保存到日志中(就像在我的应用程序中应该完成)但它不会“破坏”Web应用程序......它只是继续!

如何以及如何才能实现这一目标?


为了示例,这是我的网页(HttpCache可以像这样调用,但只是指出我正在使用Web.HttpCache对象)

if( Request.QueryString["user"] != HttpCache["MYAPP-user"] ) {
   myApp.DebugWrite("User was tempered.");
   throw System.Exception("User was tempered.");
}

global.asax 我有

...

void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    if (Server.GetLastError() != null)
    {
        Exception objErr = Server.GetLastError().GetBaseException();
        String url = Request.Url.ToString();
        String msg = objErr.Message;
        String trc = objErr.StackTrace.ToString();


        Response.Clear();

        StringBuilder html = new StringBuilder();
        // fill up html with html code in order to present a nice message
        Response.Write(html.ToString()); 

        Server.ClearError();
        Response.Flush();
        Response.End();
    }
}

...

在我的测试机器中,我总是得到带有错误消息的html,以及日志中的消息...在这个特定的机器中,我只看到日志中的错误,但应用程序继续< /强> !!!

web.config 与所有计算机完全相同,此Web应用程序在.NET 2.0上运行

它有什么用?

1 个答案:

答案 0 :(得分:-2)

在代码中注释掉Response和Server.ClearError()部分:

 //Response.Clear();

                StringBuilder html = new StringBuilder();
                // fill up html with html code in order to present a nice message
                Response.Write(html.ToString());

                //Server.ClearError();
                //Response.Flush();
                //Response.End();