3

如果 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;
}

thenApplication_Error不会被解雇,这很好。即使处理了异常,处理GetResponse()总是导致触发的错误是否有什么特别之处?Application_Error

4

2 回答 2

2

在 Application_Error 检查异常:

var exception = Server.GetLastError();

使用此代码触发 Application_Error 是不可能的。您的异常必须在此 try/catch 块之后。

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

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

于 2012-07-11T02:52:40.623 回答
1

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

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

于 2012-07-12T22:57:26.970 回答