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