即使对于处理的异常,Application_Error也会触发

时间:2012-07-04 09:25:59

标签: c# exception-handling webforms global-asax application-error

如果存在URL,我有一些代码可以显示按钮:

try
{
    string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
    WebRequest req = WebRequest.Create(dashboardURL);
    WebResponse response = req.GetResponse();
    btnDashboard.Visible = true;
}
catch (Exception)
{
    btnDashboard.Visible = false;
}

但是,在调试时,req.getResponse()会导致Application_Error触发。我检查了此处捕获的异常,它是System.Net.WebException。我的理解是Application_Error因未处理的异常而被解雇。

如果我更改代码以强制执行异常,如下所示:

try
{
    string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
    WebRequest req = WebRequest.Create(dashboardURL);

    int j = 0;
    int i = 1 / j;

    WebResponse response = req.GetResponse();
    btnDashboard.Visible = true;
}
catch (Exception)
{
    btnDashboard.Visible = false;
}

然后Application_Error没有被解雇,这很好。使用GetResponse()处理错误时是否有一些特别的问题,即使处理了异常,也会导致Application_Error触发?

2 个答案:

答案 0 :(得分:2)

在Application_Error中检查异常:

var exception = Server.GetLastError();

使用此代码触发Application_Error是不可能的。 您的例外必须在此try / catch Block之后。

还尝试清理并重建您的解决方案,或强制重新创建Designer文件(在aspx文件上更改内容)。

我在不同的ASP.NET版本上测试了你的代码,即使在MVC3 / MVC4环境中,也永远不会触发Application_Error!

答案 1 :(得分:1)

/Dashboard/Default.aspx是否在同一服务器/应用程序中?

如果是,那么处理该请求可能会导致Application_Error捕获的错误。原因是通过执行GetResponse()您正在执行HTTP请求,并且在(可能)远程服务器上处理请求时发生的任何异常都不会由调用代码上的try / catch处理。在您的特殊情况下,远程服务器=本地服务器,但这个想法不会改变。