3

射擊我有一些代碼,如果一個URL的存在是爲了顯示一個按鈕:的Application_Error即使處理的異常

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

你確定上面的異常被捕獲? –

+0

顧名思義'應用程序錯誤'是在應用程序級別發出的錯誤。 – akhil

+0

是在同一個服務器/應用程序中的'Config.RootUrl +「/Dashboard/Default.aspx」'? –

回答

1

/Dashboard/Default.aspx是否在同一個服務器/應用程序中?

如果是這樣,那麼對該請求的處理可能會導致將由Application_Error捕獲的錯誤。原因在於通過執行GetResponse()您正在執行HTTP請求,並且在(可能)遠程服務器上處理請求時發生的任何異常將不會由調用代碼上的try/catch處理。在你的特殊情況下遠程服務器=本地服務器,但這個想法不會改變。

2

在的Application_Error檢查異常:

var exception = Server.GetLastError(); 

這是不可能的Application_Error與此代碼解僱。 你的異常必須在此try/catch塊之後。

也嘗試清理並重建您的解決方案,或強制重新創建設計器文件(更改aspx文件上的內容)。

我在不同的ASP.NET版本上測試過你的代碼,即使是在MVC3/MVC4環境和Application_Error也從未被解僱!