如果存在 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处理。在您的特殊情况下,远程服务器=本地服务器,但想法不会改变。