即使对于已处理的异常,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不被解雇,这很好。 即使处理了异常,处理总是导致Application_Error触发的GetResponse()错误是否有特别之处?

在Application_Error中检查异常:

var exception = Server.GetLastError();

使用此代码触发Application_Error是不可能的。您的异常必须在此尝试/捕获阻止之后。

还可以尝试清理并重新生成解决方案,或强制重新创建设计器文件(更改 aspx 文件上的某些内容)。

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

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

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

相关内容

  • 没有找到相关文章

最新更新